            =0171    2    VERSION  =     $0171      ;version number 1.7.1
            =0000    3    nolist   =     0          ;set to 0 to generate listing
                     4             do    nolist     
                     5             LST   OFF        
                     6             else             
                     8             fin              
                     9             XC               
                     10            XC               
                     11            MX    3          ;8 BIT DATA, 8 BIT INDEXES
                     12            TR    ON         
                                   28-MAY-05   6:58:23 PM
                     14   
            =0000    15   debug    =     0          ;set to 1 when using APW debugger
                     16   
                     17   *
                     18   * This version is for the ProDev (DDT) production card. (IIGS ONLY)
                     19   *
                     20   * The default modes are invisible, 65816, emulate
                     21   *
                     22   * "PRODEV/DDT16"
                     23   * This Program is Public Domain
                     24   *
                     25   * Released by:
                     26   *
                     27   * PRODEV, INC.
                     28   * P.O. Box 162
                     29   * La Salle, MI  48145-0162
                     30   * www.prodev.biz
                     31   *
                     32   * BY: CHUCK KELLY
                     33   *
                     34   
                     35            ORG   $2000      ;RUNS FROM $C800-$CFFF SPACE
                     36   
                     37            DSK   DDT16OBJ   
                     38            PUT   EQU1       
                    >2    **********************************
                    >3    * EQU1
                    >4    **********************************
                    >5    
                    >6    * ERROR NUMBERS
                    >7    
            =0001   >8    INVCOM   =     $01        ;INVALID COMMAND
            =0002   >9    NOADRS   =     $02        ;ADDRESS EXPECTED
            =0003   >10   NUMEXP   =     $03        ;NUMBER EXPECTED
            =0004   >11   BADPAR   =     $04        ;BAD COMMAND PARAMTERS
                    >12   
            =0010   >13   BRKFUL   =     $10        ;NO ROOM FOR ADDITIONAL BREAKPOINTS
                    >14   
            =0020   >15   WRITFAIL =     $20        ;write failure
                    >16   
            =0030   >17   BADRT    =     $30        ;RT or T range JSL while in 8 bit mode
                    >18   
                    >19   
                    >20   *----------------------------------------
                    >21   * ADDRESSING MODES
                    >22   
                    >23   *MODE NUMBER BYTES SYMBOL ADDRESS
            =0000   >24   AM_IMD   =     $0         ;2-3   #      IMED
            =0001   >25   AM_ABS   =     $1         ;3     a      ABS
            =0002   >26   AM_ABSL  =     $2         ;4     al     ABS.L
            =0003   >27   AM_DIR   =     $3         ;2     d      DIR
            =0004   >28   AM_IMP   =     $4         ;1   i or S   ACC;IMP;STK
            =0005   >29   AM_DIX   =     $5         ;2   (d),y    DIR.IND.INX
            =0006   >30   AM_DILX  =     $6         ;2   [d],y    DIR.IND.L.INX
            =0007   >31   AM_DXI   =     $7         ;2   (d,x)    DIR.INX.IND
            =0008   >32   AM_DXX   =     $8         ;2    d,x     DIR.INX.W/X
            =0009   >33   AM_DXY   =     $9         ;2    d,y     DIR.INX.W/Y
            =000A   >34   AM_AXX   =     $A         ;3    a,x     ABS.INX.W/X
            =000B   >35   AM_ALXX  =     $B         ;4    al,x    ABS.L.INX.W/X
            =000C   >36   AM_AXY   =     $C         ;3    a,y     ABS.INX.W/Y
            =000D   >37   AM_REL   =     $D         ;2     r      P.C.REL
            =000E   >38   AM_RELL  =     $E         ;3     rl     P.C.REL.L
            =000F   >39   AM_AI    =     $F         ;3    (a)     ABS.IND.
            =0010   >40   AM_AIL   =     $10        ;3    [a]     ABS.IND.L
            =0011   >41   AM_DI    =     $11        ;2    (d)     DIR.IND.
            =0012   >42   AM_DIL   =     $12        ;2    [d]     DIR.IND.L
            =0013   >43   AM_AXI   =     $13        ;3   (a,x)    ABS.INX.IND
            =0014   >44   AM_SR    =     $14        ;2    d,s     STK.REL
            =0015   >45   AM_SRIX  =     $15        ;2   (d,s),y  STK.REL.IND.INX
            =0016   >46   AM_S     =     $16        ;2     s      STK
            =0017   >47   AM_XYZ   =     $17        ;3    b,b     XYZ
            =0018   >48   AM_IMD2  =     $18        ;2     #      IMED 2 bytes only (SEP,REP)
            =0019   >49   AM_A_NE  =     $19        ;3     a      JMP & JSR no effective address
                    >50   
                    >51   * ZERO PAGE USAGE
                    >52   
            =0020   >53   Z1LO     EQU   $20        
            =0021   >54   Z1HI     EQU   $21        
            =0022   >55   Z2LO     EQU   $22        
            =0023   >56   Z2HI     EQU   $23        
            =0024   >57   ZBUF5    EQU   $24        
            =0025   >58   ZBUF6    EQU   $25        
            =0028   >59   BASL     EQU   $28        
            =0029   >60   BASH     EQU   $29        
            =002A   >61   BAS2L    EQU   $2A        
            =002B   >62   BAS2H    EQU   $2B        
            =0036   >63   CSWL     EQU   $36        ;ADDRESS OF OUTPUT ROUTINE STORED HERE.
            =0037   >64   CSWH     EQU   $37        
            =0038   >65   KSWL     EQU   $38        ;ADDRESS OF INPUT ROUTINE STORED HERE.
            =0039   >66   KSWH     EQU   $39        
                    >67   
            =03F0   >68   BRKVECLO EQU   $0003F0    ;BREAK VECTOR OF AUTOSTART ROM
            =03F1   >69   BRKVECHI EQU   $0003F1    ;" " " "
            =03FB   >70   NMILOC   EQU   $0003FB    ;APPLE'S NMI VECTOR
            =07F8   >71   CNSLOT   EQU   $0007F8    ;LAST ACTIVE PERIPHERAL CARD $CN FORM
                    >72   
                    >73   
                    >74   ********** SOFT SWITCHES **********
                    >75   
            =E0C007 >76   CXON     EQU   $E0C007    ;CXROM ON SWITCH
            =E0C006 >77   SLOTROM  EQU   $E0C006    ;CXROM OFF SWITCH
            =E0C015 >78   CXFLAG   EQU   $E0C015    ;CXROM STATUS FLAG
                    >79   
            =E0C000 >80   KBD      EQU   $E0C000    ;KEYBOARD DATA
            =E0C010 >81   KBDSTRB  EQU   $E0C010    ;CLEAR KEYBOARD STROBE
            =E0C030 >82   SPKR     EQU   $E0C030    ;SPEAKER
                    >83   
            =E0C000 >84   STR80OFF EQU   $E0C000    ;WRITE, ALLOW TXTPAGE1 TO SWITCH PAGE1/PAGE2
            =E0C001 >85   STR80ON  EQU   $E0C001    ;WRITE, ALLOW TXTPAGE1 TO SWITCH MAIN/AUX
            =E0C018 >86   STORE80  EQU   $E0C018    ;READ
                    >87   
            =E0C002 >88   READMAIN EQU   $E0C002    ;READ FROM MAIN MEM (WRITE)
            =E0C003 >89   READAUX  EQU   $E0C003    ;READ FROM AUX MEM (WRITE)
            =E0C013 >90   RAMRD    EQU   $E0C013    ;READ
                    >91   
            =E0C004 >92   WRITMAIN EQU   $E0C004    ;WRITE TO MAIN MEM (WRITE)
            =E0C005 >93   WRITAUX  EQU   $E0C005    ;WRITE TO AUX MEM (WRITE)
            =E0C014 >94   RAMWRT   EQU   $E0C014    ;READ
                    >95   
            =E0C008 >96   MAINZP   EQU   $E0C008    ;MAIN STACK & ZP (WRITE)
            =E0C009 >97   AUXZP    EQU   $E0C009    ;AUX STACK & ZP (WRITE)
            =E0C016 >98   ALTZP    EQU   $E0C016    ;READ
                    >99   
            =E0C00C >100  COL80OFF EQU   $E0C00C    ;80 COL DISPLAY OFF
            =E0C00D >101  COL80ON  EQU   $E0C00D    ;80 COL DISPLAY ON
            =E0C01F >102  RD80VID  EQU   $E0C01F    ;BIT 7 = 1 FOR 80 COL, 0 FOR 40 COL
                    >103  
            =E0C00E >104  ALTCHOFF EQU   $E0C00E    ;WRITE, TURN OFF ALT CHAR SET
            =E0C00F >105  ALTCHON  EQU   $E0C00F    ;WRITE, TURN ON ALT CHAR SET
            =E0C01E >106  ALTCHAR  EQU   $E0C01E    ;READ
                    >107  
            =E0C050 >108  TEXTOFF  EQU   $E0C050    ;TEXT MODE OFF
            =E0C051 >109  TEXTON   EQU   $E0C051    ;TEXT MODE ON
            =E0C01A >110  TEXT     EQU   $E0C01A    ;Read TEXT switch
                    >111  
            =E0C052 >112  MIXEDOFF EQU   $E0C052    ;ALL TEXT OR GRAPHICS
            =E0C053 >113  MIXEDON  EQU   $E0C053    ;R/W, MIXED TEXT AND GRAPHICS IF GRAPHICS ON
            =E0C01B >114  MIXED    EQU   $E0C01B    ;Read MIXED switch
                    >115  
            =E0C054 >116  TXTPAGE1 EQU   $E0C054    ;TALK TO MAIN TEXT RAM
            =E0C055 >117  TXTPAGE2 EQU   $E0C055    ;TALK TO AUX TEXT RAM
            =E0C01C >118  PAGE2    EQU   $E0C01C    ;Read PAGE2 switch
                    >119  
            =E0C056 >120  HIRESOFF EQU   $E0C056    ;HIRES MODE OFF
            =E0C057 >121  HIRESON  EQU   $E0C057    ;HIRES MODE ON
            =E0C01D >122  HIRESFLG EQU   $E0C01D    ;Read HIRES switch
                    >123  
            =E0C022 >124  TEXTCOLR EQU   $E0C022    ;Text color
            =E0C029 >125  SUPERHR  EQU   $E0C029    ;Bit 7=1 Super, 6=1 Linear video
            =E0C035 >126  SHADOW   EQU   $E0C035    ;Bit 3=1 no shadowing 32k video buffer
            =E0C036 >127  SPEEDreg EQU   $E0C036    ;Speed register Bit 7=1 for Hi speed
                    >128  
            =E0C068 >129  GS_STATE EQU   $E0C068    ;GS state register
                    >130  
                    >131  **************************************************
                    >132  * VECTORS
                    >133  
            =FDF0   >134  COUT1APL EQU   $FDF0      ;USED TO RESTORE CSW IF EXT2 ENTERED WITH PR#N
            =FF69   >135  MONITOR  EQU   $00FF69    ;APPLE MONITOR ENTRY POINT
                    >136  
                    >137  * ASCII CODES
                    >138  
            =0084   >139  EOT      EQU   $84        ;ASCII code for EOT
            =0087   >140  BEL      EQU   $87        ;ASCII BELL code
            =008B   >141  UPARROW  EQU   $8B        ;Apple key code
            =008A   >142  DNARROW  EQU   $8A        ;Apple key code
            =0095   >143  RTARROW  EQU   $95        ;Apple key code
            =0088   >144  LTARROW  EQU   $88        ;Apple key code
            =008D   >145  CR       EQU   $8D        ;ASCII carriage return
            =008A   >146  LF       EQU   $8A        ;ASCII line feed
            =0098   >147  CTRLX    EQU   $98        ;ASCII control-X
            =0093   >148  CTRLS    EQU   $93        ;ASCII control-S
            =009B   >149  ESC      EQU   $9B        ;ASCII escape code
            =00FF   >150  DELETE   EQU   $FF        ;Apple key code
                    >151  
                    >152  * SUPER SERIAL CARD LOCATIONS FOR SLOT #2
                    >153  
            =E0C0A9 >154  SSCSTAT  EQU   $E0C0A9    
            =E0C0A8 >155  SSCDATA  EQU   $E0C0A8    
            =E0C0AB >156  SSCCONT  EQU   $E0C0AB    
            =E0C0A1 >157  SSCDIPS1 EQU   $E0C0A1    
            =E0C0A2 >158  SSCDIPS2 EQU   $E0C0A2    
            =E0C0AA >159  SSCCOMAN EQU   $E0C0AA    
                    >160  
                    >161  * VIA BASE ADDRESSES
                    >162  
            =E0C810 >163  VIAORB   EQU   $E0C810    ;ADDRESS ORB
            =E0C801 >164  VIAORA   EQU   $E0C801    ;ADDRESS ORA
            =E0C802 >165  VIADRB   EQU   $E0C802    ;ADDRESS DRB
            =E0C803 >166  VIADRA   EQU   $E0C803    ;BASE ADDRESS DRA
            =E0C804 >167  VIAT1CL  EQU   $E0C804    ;VIA TIMER 1
            =E0C805 >168  VIAT1CH  EQU   $E0C805    ;VIA TIMER 1
            =E0C806 >169  VIAT1LL  EQU   $E0C806    ;VIA TIMER 1 LATCH LOW
            =E0C807 >170  VIAT1LH  EQU   $E0C807    ;VIA TIMER 1 LATCH HI
            =E0C808 >171  VIAT2CL  EQU   $E0C808    ;VIA TIMER 2
            =E0C809 >172  VIAT2CH  EQU   $E0C809    ;VIA TIMER 2
            =E0C80A >173  VIASR    EQU   $E0C80A    
            =E0C80B >174  VIAACR   EQU   $E0C80B    
            =E0C80C >175  VIAPCR   EQU   $E0C80C    
            =E0C80D >176  VIAIFR   EQU   $E0C80D    ;VIA INTERRUPT FLAG REGISTER
            =E0C80E >177  VIAIER   EQU   $E0C80E    ;VIA INTERRUPT ENABLE REGISTER
            =E0C80F >178  VIAORAN  EQU   $E0C80F    
                    >179  
            =E0C088 >180  SEGMBASE EQU   $E0C088    ;BASE ADDRESS OF CARD SLOT I/O SPACE.
                    >181  
                    >182  **********************************
                    >183  * Two numbers will work for counter values when in 8 bit mode.
                    >184  * Only the smaller of the two will work when in 16 bit mode.
                    >185  * Make sure to use the smaller number.
                    >186  * The counter value is determined by adding the execution times
                    >187  * of all instructions executed following STZ VIAT1CH in TOEXECUT,
                    >188  * including the instructions in the slotIO routine, then subtract 3.
                    >189  * NMI occurs NMICOUNT+1.5 clock cycles after started.
                    >190  * The GS MUST be running at 1 Mhz speed.
                    >191  **********************************
                    >192  
            =0029   >193  NMICOUNT EQU   $29        
                    >194  
                    >195  * START ONBOARD RAM
                    >196  
                    >197  **************************************************
                    >198  * Keep these locations in the same order if possible, so they can
                    >199  * be published for the user's own use.
                    >200  **************************************************
                    >201  
                    >202           DUM   $E0C811    
                    >203  
E0C811: 00 00       >204  ACC      DS    2          ;ACCUMULATOR
E0C813: 00 00       >205  XREG     DS    2          ;X REGISTER
E0C815: 00 00       >206  YREG     DS    2          ;Y REGISTER
E0C817: 00 00       >207  STACK    DS    2          ;STACK POINTER
E0C819: 00 00       >208  DREG     DS    2          ;DIRECT REGISTER
E0C81B: 00          >209  DBR      DS    1          ;DATA BANK REGISTER
E0C81C: 00          >210  MSTATE   DS    1          ;MACHINE STATE
E0C81D: 00          >211  QREG     DS    1          ;SHADOW AND SPEED STATE (Quagmire)
E0C81E: 00          >212  STATUS   DS    1          ;STATUS REGISTER
E0C81F: 00          >213  PCLO     DS    1          ;PROGRAM COUNTER LOW BYTE
E0C820: 00          >214  PCHI     DS    1          ;PROGRAM COUNTER HI BYTE
E0C821: 00          >215  PBR      DS    1          ;65816 PBR REGISTER
E0C822: 00          >216  INVISIBL DS    1          ;0=NORMAL, NEGATIVE= INVISIBLE
E0C823: 00          >217  CMOSFLAG DS    1          ;0=6502, BIT 7=1=65C02, BIT 6=1=65816
                    >218  * SET OFFFLAG TO $80 IF I/O IS SLOT1 OR SERIAL
E0C824: 00          >219  IOMODE   DS    1          ;0=NORMAL, BIT 7=1=SERIAL, BIT 6=1=SLOT1
E0C825: 00          >220  OFFFLAG  DS    1          ;>$80= DON'T DISPLAY TO SCREEN
E0C826: 00          >221  STRT2FLG DS    1          ;BIT 7 1=NORMAL ENTRY, 0=DO RTS AFTER INIT
                    >222  *************** END ********************
                    >223  
E0C827: 00          >224  TOSLOT   DS    1          ;use JMP (TOSLOT) to goto slot routines
E0C828: 00          >225  SLOTCN   DS    1          ;SAVE SLOT # $CN
E0C829: 00          >226  SLOTN0   DS    1          ;SLOT # FORMAT N0
E0C82A: 00          >227  ADDHI    DS    1          ;CURRENT BREAKPOINT ADDRESS BUFFER HI BYTE
E0C82B: 00          >228  ADDLOW   DS    1          ;" " " " " LO BYTE
E0C82C: 00          >229  ZBYTE1   DS    1          
E0C82D: 00          >230  ZBYTE2   DS    1          
E0C82E: 00          >231  ZBYTE3   DS    1          
                    >232  
                    >233  ****************************************
                    >234  ** DATABRK - SBTYPE must remain together because of update **
E0C82F: 00          >235  DATABRK  DS    1          ;DATA FROM BREAKPOINT
E0C830: 00          >236  LETTER1  DS    1          ;USED IN COMMAND FIND
E0C831: 00          >237  LETTER2  DS    1          ; " "
E0C832: 00          >238  LETTER3  DS    1          ; USED IN SEG3 COMDMA
E0C833: 00          >239  LETTER4  DS    1          
E0C834: 00          >240  LETTER5  DS    1          
E0C835: 00          >241  LETTER6  DS    1          
E0C836: 00          >242  LETTER7  DS    1          ; used for Conditional BRK
E0C837: 00          >243  LETTER8  DS    1          ; used for Conditional BRK
E0C838: 00          >244  SBTYPE   DS    1          ;BREAK TYPE R, I OR C
                    >245  ***************** END ******************
                    >246  
E0C839: 00          >247  DECIMAL1 DS    1          ;USED TO CONVERT
E0C83A: 00          >248  DECIMAL2 DS    1          ;LETTER 1,2,3 FROM
E0C83B: 00          >249  DECIMAL3 DS    1          ;DECIMAL TO HEX
                    >250  
E0C83C: 00          >251  DBRDDT   DS    1          ;BANK TO USE FOR STAINDY & LDAINDY
E0C83D: 00          >252  MEMLOW   DS    1          ;MEMORY POINTERS USED BY
E0C83E: 00          >253  MEMHI    DS    1          ; MM, MD, LI COMMANDS
                    >254  
E0C83F: 00          >255  USEROPCD DS    1          ;USER'S OPCODE, USED BY STACKSAV
E0C840: 00          >256  OPCODE   DS    1          ;USED IN SEG3
E0C841: 00          >257  MLIFLAG  DS    1          ;0=MLI WAS DISASSEMBLED
E0C842: 00          >258  P16FLAG  DS    1          ;0=P16 was disassembled
E0C843: 00          >259  IERBUFF  DS    1          ;VIAIER FLAGS
                    >260  
                    >261  *ENABLT VECTOR. NMI HANDLER (JUMPS) TO THIS LOCATION IF
                    >262  * TRACE CAUSED THE NMI.
E0C844: 00 00       >263  ENABLTVC DS    2          
E0C846: 00          >264  STOPBRK  DS    1          ;<$80=STOP AT BRK WHEN TOGOFLG=0,>$7F=DON'T STOP
E0C847: 00          >265  YBUFF    DS    1          ;TEMP STORAGE FOR Y BUF
E0C848: 00          >266  YBUF2    DS    1          ;USED BY TOCOUT
E0C849: 00          >267  XBUFF    DS    1          ;TEMP STORAGE FOR X BUF
E0C84A: 00 00 00    >268  SUBTRACE DS    3          ;LOCATION OF SUBROUTINE FOR TRACE
E0C84D: 00          >269  SEGMCODE DS    1          ;CONTAINS CODED INFO ON WHERE TO TRANSFER
                    >270  
                    >271  *STORE Z PAGE LOCATIONS THAT MIGHT BE DISTURBED BY
                    >272  * DDT I/O ROUTINES.
E0C84E: 00 00 00 00 >273  ZPAGEXT  DS    $C         
                    >274  
E0C85A: 00 00       >275  RTSTACK  DS    2          ;save stack for use by realtime
E0C85C: 00          >276  RTOPCODE DS    1          ;save opcode replaced by realtime brk
E0C85D: 00          >277  RTJSRFLG DS    1          ;save JSR/JSL info
                    >278  
E0C85E: 00 00       >279  OLDSTACK DS    2          ;save stack during TRACEN
E0C860: 00          >280  OLDMSTAT DS    1          ;save mstate during TRACEN
                    >281  
                    >282  *THE FOLLOWING LOCATIONS ARE USED ONLY DURING
                    >283  * A SEGMENT CROSSOVER
E0C861: 00 00       >284  ASAVESEG DS    2          ;SAVE ACC
E0C863: 00 00       >285  XSAVESEG DS    2          ;SAVE X
E0C865: 00 00       >286  YSAVESEG DS    2          ;SAVE Y
E0C867: 00          >287  PSAVESEG DS    1          ;SAVE P
                    >288  
E0C868: 00 00 00    >289  ADDRBUFF DS    3          ;ADDRESS BUFFER
E0C86B: 00          >290  CSWLBUTT DS    1          ;USED IF BUTTON IS PRESSED
E0C86C: 00          >291  CSWHBUTT DS    1          
E0C86D: 00          >292  KSWLBUTT DS    1          
E0C86E: 00          >293  KSWHBUTT DS    1          
                    >294  
                    >295  * USED BY CALCTIME
E0C86F: 00          >296  ETIERSAV DS    1          
E0C870: 00          >297  ETORASAV DS    1          
E0C871: 00          >298  ETORBSAV DS    1          
E0C872: 00          >299  ETPCLO   DS    1          
E0C873: 00          >300  ETPCHI   DS    1          
                    >301  
E0C874: 00 00       >302  OPERAND  DS    2          ;USED IN MINI ASSEMBLER TO STORE OPERAND
E0C876: 00          >303  INITFLAG DS    1          ;INDICATES THE USER PROGRAM HAS BEEN EXECUTED
E0C877: 00          >304  INTCXSOT DS    1          ;USED TO SAVE THE STATUS OF THE IIE'S CX ROM
                    >305  
E0C878: 00          >306  INDY80S  DS    1          ;INDY SAVES 80STORE FLAG HERE
E0C879: 00          >307  INDYBUF  DS    1          ;INDY SAVES ZP FLAG HERE
                    >308  
E0C87A: 00          >309  RAMRDBF  DS    1          ;**
E0C87B: 00          >310  RAMWRTBF DS    1          ;** MUST BE CONSECUTIVE
E0C87C: 00          >311  ALTZPBF  DS    1          ;SAVE ALTZP SWITCH
                    >312  
E0C87D: 00          >313  DTOHFLG  DS    1          ;DEC TO HEX FLAG >$80 = CONVERT
E0C87E: 00          >314  ADDRS2F  DS    1          ;2 ADDRESS ENTERED IF > $80 (ADD.ADD)
                    >315  
                    >316  
                    >317  **************************************************
                    >318  * Put IOSPACE routines in this space. They will be run from
                    >319  * the $C080-$C08F card I/O space
                    >320  **************************************************
                    >321  
                    >322  * ---- SEG0 ROUTINES ---- *
                    >323  
                    >324           ERR   *-1/$E0C880 
                    >325           ORG   $E0C880    
                    >326  
                    >327  * This first byte must be at address $C880
                    >328  
E0C880: 00          >329  IOSPACE0 DS    1          ; DO NOT USE, n1 address will reset LS273
E0C881: 00          >330  C0INT    DS    1          ;PHP
E0C882: 00 00       >331           DS    2          ;MEMORY8
E0C884: 00          >332           DS    1          ;PHA
E0C885: 00 00 00 00 >333           DS    4          ;LDAL CXFLAG
E0C889: 00 00 00 00 >334           DS    4          ;STAL SLOTROM
E0C88D: 00 00       >335           DS    2          ;JMP  SLOTINT
E0C88F: 00          >336  IOCN0    DS    1          ;        xx
                    >337  
                    >338  ****************************************
                    >339  
                    >340  **************************************************
                    >341  * TCOUNT to POINT are cleared to zero during startup. Keep them together.
                    >342  **************************************************
                    >343  
E0C890: 00 00       >344  TCOUNT   DS    2          ;TRACE COUNTER
E0C892: 00          >345  TFLAG    DS    1          ;TRACE FLAG
E0C893: 00          >346  RTBRKFLG DS    1          ;BITS:7=realtime brk, 6=1=trace user brks
E0C894: 00          >347  REALTIME DS    1          ;NOT 0 IF REALTIME WINDOWS ARE SET
E0C895: 00          >348  PROGONLY DS    1          ;NOT 0 IF PROG ONLY WINDOWS ARE SET
E0C896: 00          >349  NOACCESS DS    1          ;NOT 0 IF NO ACCESS WINDOWS ARE SET
E0C897: 00          >350  TRCBRK   DS    1          ;A BRK WAS JUST TRACED
E0C898: 00          >351  WINDFLG  DS    1          ;>$80 = the windows are on
E0C899: 00          >352  BRKWFLG  DS    1          ;THE BRK WINDOW NEEDS UPDATING
E0C89A: 00          >353  PASSFLG  DS    1          ;SET BY BREAK HANDLER
E0C89B: 00          >354  HALT_ALL DS    1          ;IF NEGATIVE, HARD BREAK HALTS IN ALL BANKS
E0C89C: 00          >355  COMRTFLG DS    1          ;Bit7=1=realtime active, 6=1="RT", 6=0=T range
E0C89D: 00          >356  RTstatus DS    1          ;User's I flag saved here during JSL of RT command
                    >357  
E0C89E: 00          >358  EFLAG    DS    1          ;SET TO NON ZERO WHEN E COMMAND
E0C89F: 00          >359  GOFLAG   DS    1          ;$80= GO command active
E0C8A0: 00          >360  RTSFLAG  DS    1          ;SET BY ES COMMAND. EXECUTE TO RTS.
E0C8A1: 00          >361  EXECFLAG DS    1          
E0C8A2: 00          >362  TSFLAG   DS    1          ;>=$80 IF COMDTS
E0C8A3: 00          >363  ETFLAG   DS    1          ;USED BY CALCTIME
E0C8A4: 00          >364  FLAG80   DS    1          
                    >365  
E0C8A5: 00          >366  Iflag    ds    1          ; ORed with STATUS in EXECUTE
E0C8A6: 00          >367  PBR8     DS    1          ;program bank of 8 bit code
                    >368  *DISPFLAG FORMAT
                    >369  
                    >370  *BIT 7 = 80STORE 1=PAGE2 SWITCHES MAIN/AUX
                    >371  *BIT 6 = VBL (NO USE)
                    >372  *BIT 5 = TEXT 1=TEXT MODE 0=GRAPHICS MODE
                    >373  *BIT 4 = MIXED 1=MIXED SCREEN 0=FULL SCREEN
                    >374  *BIT 3 = PAGE2 1=PAGE2 OR AUX 0=PAGE1 OR MAIN
                    >375  *BIT 2 = HIRES 1=HIRES 0=LORES
                    >376  *BIT 1 = ALTCHARSET 1=ALT. CHAR ON 0=ALT. CHAR OFF
                    >377  *BIT 0 = 80COL 1=80 COL 0=40 COL
                    >378  
E0C8A7: 00          >379  DISPFLAG DS    1          ;SAVE DISPLAY SWITCHES
                    >380  
E0C8A8: 00          >381  TRACFLAG DS    1          ;Trace active flag if = $80
E0C8A9: 00          >382  BRKTRFLG DS    1          ;Tracing our real break if = $80
                    >383  
                    >384  * MEMORY TO DISPLAY IN WINDOW
                    >385  * FORMAT = PBR,HI,LOW
                    >386  
E0C8AA: 00 00 00 00 >387  MEMWADR  DS    12*3       ;12 LOCATIONS AT 3 BYTES EACH
                    >388  
E0C8CE: 00 00 00    >389  EFFADRS  DS    3          ;EFFECTIVE ADDRESS (LO,HI,PBR)
                    >390  
                    >391  * MEMORY PROTECTION BUFFERS
                    >392  * TYPE, PBR, (LOWER LIMIT, HI, LOW) . (UPPER LIMIT, HI, LOW)
                    >393  
E0C8D1: 00 00 00 00 >394  PROTADR  DS    6*6        ;6 LOCATIONS AT 6 BYTES EACH
E0C8F5: 00          >395  TXSFLG   DS    1          ;0=LAST INSTR. WAS NOT TXS OR TCS, (TRACEN)
                    >396  
E0C8F6: 00          >397  BANKENT  DS    1          ;used by READAD, >$7F = new bank entered
E0C8F7: 00          >398  REALBRK  DS    1          ;COUNT OF REAL BREAKS
                    >399  * POINTS TO NEXT FREE LOCATION IN BUFFER
E0C8F8: 00          >400  POINT    DS    1          ;STACK POINTER FOR BREAKS
                    >401  ************* END INITIALIZED RAM ***************
                    >402  
E0C8F9: 00          >403  SUPERSAV DS    1          ;Save Super Hi-Res byte
E0C8FA: 00          >404  PROMPT   DS    1          
E0C8FB: 00 00 00 00 >405  BASBUF   DS    4          ;BASL - BAS2H BUFFER
E0C8FF: 00          >406  WINDLEFT DS    1          
E0C900: 00          >407  WINDWDTH DS    1          
E0C901: 00          >408  WINDTOP  DS    1          
E0C902: 00          >409  WINDBTM  DS    1          
E0C903: 00          >410  CURSHORZ DS    1          
E0C904: 00          >411  CURSVERT DS    1          
E0C905: 00          >412  INVFLG   DS    1          
E0C906: 00          >413  MEMHORZ  DS    1          ;TEMP STORAGE FOR SCREEN POINTER, USED BY COUT
                    >414  
E0C907: 00          >415  INLENGTH DS    1          
E0C908: 00          >416  MEMPBR   DS    1          
E0C909: 00          >417  NUMDISP  DS    1          
E0C90A: 00 00       >418  MNEMCOMP DS    2          
E0C90C: 00          >419  MFLAG    DS    1          
E0C90D: 00          >420  TOGOFLG  DS    1          ; SET TO 0 BY DECTOGO WHEN BRKTOGO = 0
E0C90E: 00 00 00 00 >421  SELFMOD  DS    4          ;RUN SELF MODIFING CODE FROM HERE IN SETDISP
E0C912: 00          >422  HARDPBR  DS    1          ;BANK # OF HARDWARE BREAK
E0C913: 00 00       >423  RET_ADD  DS    2          ;USER'S RETURN ADDRESS
                    >424  
E0C915: 00 00       >425  TOSLOTIO DS    2          ;(JMP) to TOLDASTA in slot space
E0C917: 00          >426  CXSTATUS DS    1          ;SAVE CXROM STATUS HERE
E0C918: 00          >427  LOWADD   DS    1          
E0C919: 00          >428  HIADD    DS    1          
E0C91A: 00          >429           DS    1          
                    >430  
                    >431  *BIT 7=0=NATIVE MODE 65816,
                    >432  * BIT 7=1=6502 OR 65C02 OR 65816 IN 65C02 MODE
E0C91B: 00          >433  EMULATE  DS    1          
                    >434  
E0C91C: 00          >435  STAISAV  DS    1          ;STAindy uses this for temp storage
                    >436  
                    >437           ERR   $E0C900-1/* 
                    >438  ***************************************************************
                    >439  ****** These buffers MUST not cross page boundary *************
                    >440  
            =0150   >441  WORKSTAK EQU   $000150    ;LOCATION OF WORK STACK
            =0028   >442  WSTKLGTH EQU   40         ;SIZE OF WORK STACK BUFFER
E0C91D: 00 00 00 00 >443  WSTKBUFF DS    WSTKLGTH   ;SAVE WORK STACK DATA HERE
                    >444  
            =000F   >445  STACKBUF EQU   15         ;SIZE OF STACK BUFFER
E0C945: 00 00 00 00 >446  STKBUFM  DS    STACKBUF   ;SAVE MAIN BANK STACK DATA HERE
E0C954: 00 00 00 00 >447  STKBUFA  DS    STACKBUF   ;SAVE AUX BANK STACK DATA HERE
                    >448  
                    >449  * Character input buffer.
E0C963: 00 00 00 00 >450  IN       DS    30         ;INPUT BUFFER IN EXT RAM
                    >451  
                    >452  *********** DDT'S VERY OWN STACK SPACE *******************
                    >453  * This area is used for stack space by the DDT
                    >454  * Memory shadowing must be set to allow access
                    >455  *   to the peripheral card space from bank 0.
                    >456  **********************************************************
E0C981: 00 00 00 00 >457           DS    30         
            =E0C99E >458  DDTSTACK EQU   *-1        
E0C99F: 00 00       >459           DS    2          ;buffer zone
                    >460  
E0C9A1: 00 00 00 00 >461  TEMP     DS    4          ;TEMPORARY STORAGE LOCATIONS
                    >462  
                    >463  *----------------------------------------
                    >464  * Save $3FB NMI & $E1/0070 BRK vectors here
E0C9A5: 00 00 00    >465  V0003FB  DS    3          ;NMI vector
E0C9A8: 00 00 00    >466  V0103FB  DS    3          ;NMI vector for AUX mem
E0C9AB: 00 00 00 00 >467  VE10070  DS    4          ;BRK vector
                    >468  
                    >469  DDTSPEED                  
E0C9AF: 00          >470           DS    1          ;save speed bit here
E0C9B0: 00          >471  MODE     DS    1          ;MODE OF INSTRUCTION 01 TO 0D PLUS FF
                    >472  
                    >473  * When RESTFLAG is set it indicates the I/O routines have
                    >474  * been used which disturbed the screen RAM or ZPAGE locations
E0C9B1: 00          >475  RESTFLAG DS    1          
                    >476  
E0C9B2: 00 00 00    >477  BRKSTUF  DS    3          ;address of BRK VARiables in GS RAM.
E0C9B5: 00 00 00    >478  DDT3F8   DS    3          ;save GS ^Y vector here
E0C9B8: 00          >479  TEXTCLRS DS    1          ;save text color
E0C9B9: 00          >480  STFLAG   DS    1          ; STep flag $80=STep mode $00=TR mode
E0C9BA: 00          >481  KEY      DS    1          ;Stop command key
                    >482  
                    >483  * RAM locations $C9E6-$C9FF are reserved for vectors.
                    >484  
                    >485           ERR   *-1/$E0C9E6 
                    >486           ORG   $E0C9E6    
                    >487  
E0C9E6: 00          >488  BRKLO816 DS    1          ;LOW BYTE OF 65816 BRK VECTOR
E0C9E7: 00          >489  BRKHI816 DS    1          ;HI BYTE
E0C9E8: 00 00       >490  ABORT    DS    2          ;NOT USED BY EXT
E0C9EA: 00          >491  NMILO816 DS    1          ;LOW BYTE OF 65816 NMI VECTOR
E0C9EB: 00          >492  NMIHI816 DS    1          ;HI BYTE
E0C9EC: 00 00       >493  RESERV16 DS    2          ;NOT USED
E0C9EE: 00 00       >494  IRQ816   DS    2          ;NOT USED BY EXT
E0C9F0: 00 00 00 00 >495           DS    4          ;NOT USED
E0C9F4: 00 00       >496  COP6502  DS    2          ;NOT USED BY EXT
E0C9F6: 00 00       >497  RESERV02 DS    2          ;NOT USED
E0C9F8: 00 00       >498  ABORT02  DS    2          ;NOT USED BY EXT
E0C9FA: 00          >499  NMILO    DS    1          ;LOW BYTE OF 6502 NMI VECTOR
E0C9FB: 00          >500  NMIHI    DS    1          ;HI BYTE
E0C9FC: 00          >501  RESETLO  DS    1          ;LOW BYTE OF RESET VECTOR
E0C9FD: 00          >502  RESETHI  DS    1          ;HI BYTE
E0C9FE: 00          >503  IRQLO    DS    1          ;LOW BYTE OF 6502 IRQ/BRK
E0C9FF: 00          >504  IRQHI    DS    1          ;HI BYTE
                    >505  
                    >506           DEND             
                    >507  
                    >508  *------------------------------
                    >509  * Ram usage for SEG 1
                    >510  *------------------------------
                    >511  
                    >512           DUM   $E0C811    
                    >513  
E0C811: 00 00       >514  ACC1     DS    2          ;ACCUMULATOR
E0C813: 00 00       >515  XREG1    DS    2          ;X REGISTER
E0C815: 00 00       >516  TOSLOTC0 DS    2          ;(JMP) to C0n0 routines
                    >517  
                    >518  
                    >519  *---------------------------------------------------
                    >520  * I/O space routines
                    >521  * They are run from the $C080 - $C08F card I/O space
                    >522  *----------------------------------------------------
                    >523  
                    >524           ERR   *-1/$E0C880 
                    >525           ORG   $E0C880    
                    >526  
E0C880: 00 00       >527           DS    2          ; reserved
                    >528  IOSPACE1                  
E0C882: 00 00 00 00 >529           DS    4          ; STAL $E0CFFF
E0C886: 00 00       >530           DS    2          ; STAL $E0C300
E0C888: 00          >531  IOUSER   DS    1          ;         xx
E0C889: 00          >532           DS    1          ;       xx
E0C88A: 00          >533           DS    1          ; STAL $E0C0C8
E0C88B: 00          >534  IOSEGM   DS    1          ;           xx
E0C88C: 00 00       >535           DS    2          ;       xxxx
E0C88E: 00 00       >536           DS    2          ; reserved
                    >537  
                    >538  *----- End of IO space1 routine -----*
                    >539  
                    >540           DEND             
                    >541  
                    >542  *------------------------------
                    >543  * Ram usage for SEG 6
                    >544  *------------------------------
                    >545  
                    >546  * Break stack pointers (valid only for RAM seg 6)
                    >547  * 50 breaks maximum
                    >548  * -------  SPECIAL NOTE ------------
                    >549  * No group may occupy more than 1 Bank
                    >550  
                    >551           DUM   $E0C838    ;LEAVE ROOM AT TOP OF SEG6 FOR VARIABLES
                    >552  
E0C838: 00 00 00 00 >553  BRKTYPE  DS    50         ;BREAK TYPE
E0C86A: 00 00 00 00 >554  BRKPBR   DS    50         ;BREAK PBR (BANK #)
E0C89C: 00 00 00 00 >555  BRKHI    DS    50         ;HI ADDRESS BYTE
E0C8CE: 00 00 00 00 >556  BRKLOW   DS    50         ;LOW ADDRESS BYTE
E0C900: 00 00 00 00 >557  BRKTGHI  DS    50         ;TO GO, HI BYTE
E0C932: 00 00 00 00 >558  BRKTGLOW DS    50         ;TO GO, LOW BYTE
E0C964: 00 00 00 00 >559  BRKPASHI DS    50         ;TIMES TO PASS, HI BYTE
E0C996: 00 00 00 00 >560  BRKPASLO DS    50         ;TIMES TO PASS, LOW BYTE
E0C9C8: 00 00 00 00 >561  BRKDATA  DS    50         ;ORIGINAL DATA BYTE
                    >562  
                    >563           DEND             
                    >564  
                    >565  *------------------------------
                    >566  * Ram usage for SEG 7
                    >567  *------------------------------
                    >568  
                    >569           DUM   $E0C811    
                    >570  
                    >571  *---------------------------------------------------
                    >572  * I/O space routines
                    >573  * They are run from the $C080 - $C08F card I/O space
                    >574  *----------------------------------------------------
                    >575  
                    >576           ERR   *-1/$E0C880 
                    >577           ORG   $E0C880    
                    >578  
                    >579  IOSPACE7                  
E0C880: 00          >580           DS    1          ; reserved
E0C881: 00          >581           DS    1          ; DO NOT USE, n1 address will reset LS273
E0C882: 00          >582           DS    1          ; reserved
E0C883: 00          >583           DS    1          ; STAL $E0C007
E0C884: 00          >584  IOCX7    DS    1          ;           xx , make 06 if CXROM is off
E0C885: 00 00       >585           DS    2          ;       xxxx
E0C887: 00          >586           DS    1          ; LDA #ACC
E0C888: 00          >587  IOACC    DS    1          ;      xx
E0C889: 00          >588  IORTI    DS    1          ; RTI or PLP
E0C88A: 00          >589  IORTL    DS    1          ; RTL {8 bit non 0 bank} or JML $FFBF7B {TOGSINT}
E0C88B: 00          >590  IOPCLO   DS    1          ;          xx
E0C88C: 00          >591  IOPCHI   DS    1          ;        xx
E0C88D: 00          >592  IOPBR    DS    1          ;      xx
E0C88E: 00 00       >593           DS    2          ; BRA TOP7
                    >594  
                    >595  *----- End of IO space7 routine -----*
                    >596  
                    >597           DEND             
                    >598  
                    >599  *------------------------------
                    >600  * Ram usage for SEG 8
                    >601  *------------------------------
                    >602  
                    >603           DUM   $E0C811    
                    >604  
                    >605  *---------------------------------------------------
                    >606  * I/O space routines
                    >607  * They are run from the $C080 - $C08F card I/O space
                    >608  *----------------------------------------------------
                    >609  
                    >610           ERR   *-1/$E0C880 
                    >611           ORG   $E0C880    
                    >612  
                    >613  IOSPACE8                  
E0C880: 00          >614           DS    1          ; STA C007
E0C881: 00          >615  IOCX8    DS    1          ;       xx , make 06 if CXROM is off
E0C882: 00          >616           DS    1          ;     xx
E0C883: 00          >617           DS    1          ; XBA
E0C884: 00          >618  IOOPCD   DS    1          ; LDAL/STAL $012345,X
E0C885: 00          >619  IOLADRS  DS    1          ;                xx
E0C886: 00          >620  IOHADRS  DS    1          ;              xx
E0C887: 00          >621  IODBR    DS    1          ;            xx
E0C888: 00 00 00    >622           DS    3          ; STA SLOTROM
E0C88B: 00 00       >623           DS    2          ; JMP SLOTRTS
E0C88D: 00          >624  IOCN8    DS    1          ;         xx
E0C88E: 00 00       >625           DS    2          ; BRA TOP8
                    >626  
                    >627  *----- End of IO space8 routine -----*
                    >628  
                    >629           DEND             
                     39            USE   MACROS     
                    >1    *----------------------------------
                    >2    *    Macro definitions
                    >3    *----------------------------------
                    >4    
                    >5    INDEX8   MAC              ;Sets 8 bit indexs
                    >6             SEP   #$10       
                    >7             <<<              
                    >8    
                    >9    INDEX16  MAC              ;Sets 16 bit indexs
                    >10            REP   #$10       
                    >11            <<<              
                    >12   
                    >13   MEMORY8  MAC              ;Sets memory size to 8 bits
                    >14            SEP   #$20       
                    >15            <<<              
                    >16   
                    >17   MEMORY16 MAC              ;Sets memory size to 16 bits
                    >18            REP   #$20       
                    >19            <<<              
                    >20   
                    >21   MX8      MAC              ;Sets both memory & indexs to 8 bits
                    >22            SEP   #$30       
                    >23            <<<              
                    >24   
                    >25   MX16     MAC              ;Sets both memory & indexs to 16 bits
                    >26            REP   #$30       
                    >27            <<<              
                     40            PUT   SEG0       
                    >2    *-------------------------------------------------
                    >3    *            SEG0
                    >4    *-------------------------------------------------
                    >5    
                    >6    **************************************************************************
                    >7    *------------------ DO NOT CHANGE CODE IN THIS SECTION  -----------------*
                    >8    *------------------ so entry points can be published. -------------------*
                    >9    **************************************************************************
                    >10   
                    >11   ]segnum  =     #$0000     ;current segment number
                    >12   
                    >13            ORG   $E0C800    ;2K SLOT
                    >14   
                    >15   * THE FOLLOWING IS RUN FROM THE CARD SLOT SPACE.
                    >16   * The DDT16 must be in slots 4,5,6 or 7.
                    >17   
                    >18   * THIS IS FIRST INSTRUCTION IN EPROM
                    >19   
E0C800: 08          >20   Start1   PHP              
E0C801: 38          >21            SEC              
E0C802: 80 09 =C80D >22            BRA   StayIn     
                    >23   
                    >24   *-------------------------------------
                    >25   * --- Alternate entry point ---
                    >26   * Start here if you want the DDT card to do an RTS after it is initialized.
                    >27   * The contents of the Accumulator determine the return condition as follows:
                    >28   * A = 02 The button & BRKs are not enabled, writing to DDT is enabled,
                    >29   *        accessing the vectors $FFE8-$FFFF is OK.
                    >30   * A = 03 The button is the only way back into the DDT. Accessing the vectors
                    >31   *        is OK. The DDT is write protected.
                    >32   * A = XX The button & BRKs are enabled, writing to DDT is enabled, accessing
                    >33   *        the vectors will disable the Apples ROM in the $FFxx addresses.
                    >34   * If entered in emulation mode (E=1) we do an RTS
                    >35   * Else we do an RTL
                    >36   
E0C804: 08          >37   Start2   PHP              
E0C805: 18          >38            CLC              
E0C806: 80 05 =C80D >39            BRA   StayIn     
                    >40   
                    >41   *---------------------------------------------------
                    >42   * --- Alternate entry point ---
                    >43   *
                    >44   * Warm reentry. Entering here preserves user's breakpoints and system settings.
                    >45   
                    >46   WarmEntr                  
E0C808: 80 51 =C85B >47            BRA   CmdDoRTS   
                    >48   
                    >49   * come here to restore user's status incase interrupts are pending
            =E0C809 >50   SlotPLP  EQU   *-1        ;equate for RTS
E0C80A: 28          >51            PLP              ;restore status
E0C80B: 6B          >52            RTL              ;go to user's return address
                    >53   
E0C80C: A2          >54            HEX   A2         ;$A2 is device signature
                    >55   
                    >56   **************************************************************************
                    >57   *------------------ DON'T CHANGE ANYTHING ABOVE THIS POINT --------------*
                    >58   *------------------ so entry points can be published. -------------------*
                    >59   **************************************************************************
                    >60   
E0C80D:             >61   StayIn   MEMORY8          
E0C80D: E2 20       >61            SEP   #$20       
                    >61            <<<              
E0C80F: D8          >62            CLD              
E0C810: 8F FF CF E0 >63            STAL  $E0CFFF    ;get 2K space
E0C814: 8F 11 C8 E0 >64            STAL  ACC        ; save Acc
E0C818: 6A          >65            ROR              ;SET MSB WITH CARRY
E0C819: 8F 26 C8 E0 >66            STAL  Strt2Flg   ;BIT 7=0 DO AN RTS AFTER INITIALIZATION
                    >67   
E0C81D: 18          >68            CLC              
E0C81E: FB          >69            XCE              ;native mode
                    >70   * Save User's return address from stack
E0C81F:             >71            MEMORY16         
E0C81F: C2 20       >71            REP   #$20       
                    >71            <<<              
E0C821: A3 02       >72            LDA   $02,S      ;GET RETURN ADDRESS
E0C823: 8F 13 C9 E0 >73            STAL  RET_ADD    ;SAVE for "QU" command
E0C827:             >74            MEMORY8          
E0C827: E2 20       >74            SEP   #$20       
                    >74            <<<              
                    >75   
                    >76   * Put next 3 lines here from SAVEREG so COMDJS did not change DBR
E0C829: 8B          >77            PHB              
E0C82A: 68          >78            PLA              
E0C82B: 8F 1B C8 E0 >79            STAL  DBR        ;SAVE DATA BANK REG.
E0C82F: FB          >80            XCE              ;restore user's E flag so its saved in SAVEREG
                    >81   
E0C830: 28          >82            PLP              ;retrieve status
E0C831: 20 82 CD    >83            JSR   SAVEREG    ;SAVE REGISTERS & SWITCHES, $E0 TO DBR
                    >84   * Returns with MX8 & stack in work stack area.
                    >85   
                    >86   * Put next 3 lines here from SAVEREG so COMDJS did not change PBR
E0C834: 4B          >87            PHK              
E0C835: 68          >88            PLA              
E0C836: 8D 21 C8    >89            STA   PBR        ;set to user's PBR
                    >90   
                    >91   * DETERMINE SLOT NUMBER
E0C839: 20 B6 CF    >92            JSR   PUTSLOT    ;PUT SLOT NUMBER ON STACK
E0C83C: A3 00       >93            LDA   $00,S      
E0C83E: 8D 28 C8    >94            STA   SLOTCN     ;SAVE SLOTCN
E0C841: 29 0F       >95            AND   #$0F       ;MAKE SLOT0N
E0C843: 0A          >96            ASL              
E0C844: 0A          >97            ASL              
E0C845: 0A          >98            ASL              
E0C846: 0A          >99            ASL              
E0C847: 8D 29 C8    >100           STA   SLOTN0     ;SAVE SLOT NUMBER n0
E0C84A: AA          >101           TAX              
                    >102  
                    >103  * Use Misc. Tools to find the location of the BRK Variables
E0C84B:             >104           MX16             
E0C84B: C2 30       >104           REP   #$30       
                    >104           <<<              
E0C84D: 48          >105           PHA              ;space for result
E0C84E: 48          >106           PHA              ;
E0C84F: F4 09 00    >107           PEA   #$0009     ;parameter for BRK VAR
E0C852: A2 03 16    >108           LDX   #$1603     ;misc tools #16
E0C855: 22 00 00 E1 >109           JSL   $E10000    ;make tool call
                    >110  
                    >111  * Go to the end of the slot space to finish the startup to leave room above
                    >112  * $Cn7F for the routines that need it
E0C859: 80 67 =C8C2 >113           BRA   STARTUP2   
                    >114           mx    %11        
                    >115  
                    >116  *------------------------------------------
                    >117  * RETURN POINT FROM COMDDO USER SUBROUTINE
                    >118  **** ALSO USED BY WARMENTR ****
                    >119  
                    >120  CMDDORTS                  
E0C85B: 8F FF CF E0 >121           STAL  $E0CFFF    
E0C85F: 78          >122           SEI              ;disable interrupts
E0C860: 20 78 CD    >123           JSR   RTSREST    ;SAVE REGISTERS, SET NATIVE MODE & MX8
E0C863: 38          >124           SEC              
E0C864: 6E 76 C8    >125           ROR   INITFLAG   ;INDICATE USER MAY HAVE MESSED WITH SCREEN
E0C867: 4C 49 CA    >126           JMP   CMDOCONT   ;continue in 2K slot
                    >127  
                    >128  *======================================================================
                    >129  *       DDT  INTERRUPT  HANDLER
                    >130  *
                    >131  * All interrupts vectored here from C0INT code in I/O space
                    >132  *
                    >133  
E0C86A: 8F FF CF E0 >134  SLOTINT  STAL  $E0CFFF    ;2K off (must be before $Cn7F)
E0C86E: 4C 07 CE    >135           JMP   INTSTUFF   ;DO INTERRUPT HOUSE KEEPING STUFF
                    >136  
                    >137  * Return here from I/O routines
E0C871: FB          >138  IORETRN  XCE              ;save Carry
E0C872: 18          >139           CLC              ;restore native mode
E0C873: FB          >140           XCE              
                    >141  
                    >142  ** Enable DDT's 2K slot
E0C874: 8D FF CF    >143  DDTENAB  STA   $CFFF      ;Disable all 2K slots
E0C877: 60          >144           RTS              ;Only our 2K slot is active
                    >145  
                    >146  * Return from I/O routines to card slot space
            =E0C878 >147  SLOTRTS  EQU   *          
E0C878: 8F FF CF E0 >148           STAL  $E0CFFF    ;DISABLE 2K
                    >149  * THIS POINT MUST BE BEFORE $CN7F
                    >150           ERR   *-1/$E0C87F 
                    >151  
E0C87C: FA          >152           PLX              ;restore X that was saved in LDA/STAINDY
                    >153  
                    >154  * Restore memory state switches
E0C87D: 8D 04 C0    >155           STA   WRITMAIN   ;DEFAULT TO MAIN
E0C880: 8D 02 C0    >156           STA   READMAIN   
E0C883: 20 61 CD    >157  :OFF     JSR   EXCHZPAG   ;EXCHANGE ZERO PAGE LOCATIONS
E0C886: D8          >158           CLD              
E0C887: C9 00       >159           CMP   #0         ;SET CONDITION CODES
E0C889: 60          >160           RTS              
                    >161  
                    >162  *----------------------------------------
                    >163  * Continue break handler
                    >164  
E0C88A:             >165  BREAK    MEMORY16         
E0C88A: C2 20       >165           REP   #$20       
                    >165           <<<              
E0C88C: AD 1F C8    >166           LDA   PCLO       ;correct for the way the BRK inst works
E0C88F: 3A          >167           DEC              
E0C890: 3A          >168           DEC              
E0C891: 8D 1F C8    >169           STA   PCLO       
E0C894:             >170           MEMORY8          
E0C894: E2 20       >170           SEP   #$20       
                    >170           <<<              
                    >171  
E0C896: 20 C6 CF    >172           JSR   TRANSFR0   ;SET PBR IF EMULATION MODE, SET INITFLAG
E0C899: 56          >173           DFB   SETPBRC    ;code
E0C89A: 8D 9A C8    >174           STA   PASSFLG    ;CONTINUE WITH GO AFTER TRACING
E0C89D: 4C 99 CA    >175           JMP   LOOKBRK    ; THRU BRK
                    >176  
                    >177           MX    %11        
                    >178  
                    >179  ****************************************
                    >180  * THIS POINT MUST BE AFTER $Cn7F
                    >181  
                    >182  **** ERR *-1/$E0C880
                    >183  **** DS $E0C880-*,$FF
                    >184           ERR   $E0C87F/*  
                    >185  
                    >186  *----------------------------------------
                    >187  * Pascal 1.1 slot interface
                    >188  *
                    >189  * Call the firmware routine specified by the low byte of the Acc in the
                    >190  * Pascal V1.1 compatible device in slot 1 or 2. Enter with X=$C1 or $C2, Y=$n0,
                    >191  * Acc low byte = offset to Pascal entry point offset.
                    >192  * Acc hi byte = character to write if writing or status request code.
                    >193  
            =E0C89F >194  TOPASCAL EQU   *-1        ;EQU for RTS
E0C8A0: 5A          >195           PHY              ;save $n0
E0C8A1: A8          >196           TAY              ;offset to Pascal firmware routine
E0C8A2: 2C FF CF    >197           BIT   $CFFF      ;disable 2K ROMS
E0C8A5: E0 C1       >198           CPX   #$C1       ;slot #1 ?
E0C8A7: D0 08 =C8B1 >199           BNE   :SLOT2     ;if no
E0C8A9: 2C 00 C1    >200           BIT   $C100      ;enable slot 1
E0C8AC: B9 00 C1    >201           LDA   $C100,Y    ;Pascal firmware offset
E0C8AF: 80 06 =C8B7 >202           BRA   :CONT      
E0C8B1: 2C 00 C2    >203  :SLOT2   BIT   $C200      ;enable slot 2
E0C8B4: B9 00 C2    >204           LDA   $C200,Y    ;Pascal firmware offset
E0C8B7: 3A          >205  :CONT    DEC              ;offset - 1
E0C8B8: 7A          >206           PLY              ;restore Y
E0C8B9: 38          >207           SEC              
E0C8BA: FB          >208           XCE              ;8 bit mode for Pascal 1.1 calls
E0C8BB: 62 B2 FF    >209           PER   IORETRN-1  ;return address in our slot space
E0C8BE: DA          >210           PHX              ;$C1 or $C2
E0C8BF: 48          >211           PHA              ;low byte of firmware offset -1
E0C8C0: EB          >212           XBA              ;character to send if writing or request code
E0C8C1: 60          >213           RTS              ;simulate JSR to Pascal firmware
                    >214  
                    >215  *-----------------------------------------------------------
                    >216  * continuation of startup
                    >217           mx    %00        
                    >218  
                    >219  STARTUP2                  
E0C8C2: 68          >220           PLA              ;get low word of BRK VAR vector
E0C8C3: 8D B2 C9    >221           STA   BRKSTUF    ;save in DDT RAM
E0C8C6: 68          >222           PLA              ;get hi word
E0C8C7:             >223           MX8              
E0C8C7: E2 30       >223           SEP   #$30       
                    >223           <<<              
E0C8C9: 8D B4 C9    >224           STA   BRKSTUF+2  
                    >225  
                    >226  * Clear LS109 bottom to allow segment changes.
E0C8CC: A9 FE       >227           LDA   #%11111110 ;CB2 HI, CB1 POS EDGE, CA2 HI, CA1 NEG EDGE
E0C8CE: 8D 0C C8    >228           STA   VIAPCR     ;Set up VIA
                    >229  
                    >230  * Initialize DDT interrupt vector buffers
                    >231  * Init RAM & VIA, display windows & copyright notice
E0C8D1: 20 C6 CF    >232           JSR   TRANSFR0   ;INITIALIZE RAM VECTORS & VIA
E0C8D4: 3E          >233           DFB   INITRAMVC  ;CODE
                    >234  
                    >235  * Display program version number & date, set VIA condition
                    >236  * Set condition code C as follows:
                    >237  * C = 1 = enter DDT
                    >238  * C = 0 = return to user after init
                    >239  
E0C8D5: 20 C6 CF    >240           JSR   TRANSFR0   
E0C8D8: 15          >241           DFB   DISVERSC   ;code
                    >242  
E0C8D9: 90 03 =C8DE >243           BCC   :NOENTER   ;Do not Enter DDT
E0C8DB: 4C 23 CF    >244           JMP   GETCOM0    ;Enter DDT
                    >245  
                    >246  **************************************************
                    >247  * LEAVE DDT
                    >248  **************************************************
                    >249  
                    >250  * Restore stack & DBR
                    >251  :NOENTER                  
E0C8DE:             >252           INDEX16          
E0C8DE: C2 10       >252           REP   #$10       
                    >252           <<<              
E0C8E0: AE 17 C8    >253           LDX   STACK      ;GET USER'S STACK
E0C8E3: 9A          >254           TXS              ;RESTORE
E0C8E4:             >255           INDEX8           
E0C8E4: E2 10       >255           SEP   #$10       
                    >255           <<<              
E0C8E6: EB          >256           XBA              ;SAVE LOW BYTE OF ACC
E0C8E7: AD 1B C8    >257           LDA   DBR        ;GET USER'S DBR
E0C8EA: 48          >258           PHA              
E0C8EB: AB          >259           PLB              ;restore DBR
E0C8EC: EB          >260           XBA              ;RESTORE LOW BYTE OF ACC
E0C8ED: 8D 0C C8    >261           STA   VIAPCR     ;Set return condition
E0C8F0: 2C 1B C9    >262           BIT   EMULATE    ;what mode was user in?
E0C8F3: 30 01 =C8F6 >263           BMI   :DORTS     ;IF emulation mode
E0C8F5: 6B          >264           RTL              ;RETURN BACK TO USER WITH DDT INITIALIZED
E0C8F6: 60          >265  :DORTS   RTS              ;user was in emulation mode so do RTS
                    >266  
                    >267  *-------------------------------------------------
                    >268  *  NMICONT
                    >269  *
                    >270  * Setting InitFlag causes the text page & switches to be saved
                    >271  * by the DDT output routines if invisible mode is on.
E0C8F7: 4C 00 CA    >272  NMICONT  JMP   NMIVEC2    ;jump to the NMI handler in 2K space
                    >273  
                    >274  *-------------------------------------------------
                    >275  * USERINT = The interrupt was not from DDT so go to User's interrupt handler
E0C8FA: 4C 04 CD    >276  USERINT  JMP   TOC0N0IO   
                    >277  
                    >278  *** This point must be before $C8FD
                    >280           ERR   *-1/$E0C8FD 
                    >281  
                    >282           DS    $E0C8FD-*,$FF ;fill with $FF
                    >283  
                    >284  * Version number of DDT16 used by Init
E0C8FD: 71 01       >285           DW    VERSION    
                    >286  
E0C8FF: 01          >287           HEX   01         ;don't change speed register
                    >288           do    nolist     
                    >289           LST   OFF        
                    >290           fin              
                    >291  
                    >292  ******************************************************************************
                    >293  *                     STARTING SEGMENT 0 OF 2K SLOT.
                    >294  *
                    >295  * !!!!!! WARNING !!!!!!!
                    >296  * Bible verse follows. Don't read at your own risk.
                    >297  *
                    >298  ******************************************************************************
                    >299  
E0C900: C6 EF F2 A0 >300           ASC   "For God so loved the world, that he gave his only begotten " 
E0C93B: D3 EF EE AC >301           ASC   "Son, that whosoever believeth in him should not perish, " 
E0C973: E2 F5 F4 A0 >302           ASC   "but have everlasting life. (St. John 3:16)" 
                    >303  
                    >304           ERR   *-1/$E0CA00 
                    >305  *******************************************
                    >306  * MAKE SURE THIS POINT IS $CA00 OR HIGHER *
                    >307  *******************************************
                    >308  
E0C99D: FF FF FF FF >309           DS    $E0CA00-*,$FF 
                    >310  
                    >311  *---------------------------------------------------
                    >312  *       NMIVEC (must start in segment zero)
                    >313  
                    >314  NMIVEC2                   
E0CA00: 20 C6 CF    >315           JSR   TRANSFR0   ;SET PBR IF EMULATION MODE, SET INITFLAG
E0CA03: 56          >316           DFB   SETPBRC    ;code
                    >317  
E0CA04: AD 0D C8    >318           LDA   VIAIFR     ;GET INTERRUPT FLAG REG.
E0CA07: 2D 43 C8    >319           AND   IERBUFF    ;TEST ONLY THOSE BITS THAT ARE ENABLED
E0CA0A: 4A          >320           LSR              
E0CA0B: 4A          >321           LSR              
E0CA0C: B0 26 =CA34 >322           BCS   COMMDRCL   ;IF BUTTON
                    >323  
E0CA0E: 2C A3 C8    >324           BIT   ETFLAG     ;Was NMI caused by ET?
E0CA11: 30 24 =CA37 >325           BMI   CONTNMI    ;If yes
                    >326  
E0CA13: 2C A8 C8    >327           BIT   TRACFLAG   ;Was NMI caused by Trace?
E0CA16: 30 1F =CA37 >328           BMI   CONTNMI    ;if yes
                    >329  
                    >330  * NMI was caused by Hard Break
E0CA18: 2C 9B C8    >331           BIT   HALT_ALL   ;IF SET HALT IN ALL BANKS
E0CA1B: 30 13 =CA30 >332           BMI   HARDSTP    ;STOP
E0CA1D: AD 1B C8    >333           LDA   DBR        
E0CA20: CD 12 C9    >334           CMP   HARDPBR    ;STOP IN THIS BANK?
E0CA23: F0 0B =CA30 >335           BEQ   HARDSTP    ;IF YES
E0CA25: AD 21 C8    >336           LDA   PBR        
E0CA28: CD 12 C9    >337           CMP   HARDPBR    ;STOP IN THIS BANK?
E0CA2B: F0 03 =CA30 >338           BEQ   HARDSTP    ;IF YES
E0CA2D: 4C 9F CC    >339  DOEXEC   JMP   EXECUTE    ;don't stop in this bank
                    >340  
E0CA30: 20 C6 CF    >341  HARDSTP  JSR   TRANSFR0   ;DISPLAY "HARD BREAK"
E0CA33: 14          >342           DFB   DISHARDC   ;CODE
                    >343  
E0CA34: 4C D0 CB    >344  COMMDRCL JMP   COMDDR     
                    >345  
E0CA37: 6C 44 C8    >346  CONTNMI  JMP   (ENABLTVC) ;GO TO THE TRACE VECTOR LOCATION
                    >347  
                    >348  *-------------------------------------------------
                    >349  * Come here if NMI caused by ET or Trace
                    >350  
E0CA3A: 20 C6 CF    >351  ETVECTOR JSR   TRANSFR0   ;CONTINUE IN different segment
E0CA3D: 5A          >352           DFB   ETVCONTC   ;code
E0CA3E: 2C A8 C8    >353           BIT   TRACFLAG   ;was NMI caused by Trace?
E0CA41: 10 03 =CA46 >354           BPL   :NOTRAC    ;if no
E0CA43: 4C 75 CB    >355           JMP   NMITRC     ;if yes
E0CA46: 4C 23 CF    >356  :NOTRAC  JMP   GETCOM0    
                    >357  
                    >358  *-------------------------------------------------
                    >359  * Disable all interrupts, put /INIT low
                    >360  
E0CA49: A9 7F       >361  CMDOCONT LDA   #%01111111 ;DISABLE ALL INTERRUPTS
E0CA4B: 8D 0E C8    >362           STA   VIAIER     ;ALSO CLEARS BIT 7 OF VIAIFR
E0CA4E: AD 0C C8    >363           LDA   VIAPCR     ;ENTER HERE TO PUT /INIT LOW
E0CA51: 09 EE       >364           ORA   #%11101110 ;REMOVE INVISIBILITY (CA2 HI) & don't replace
E0CA53: 8D 0C C8    >365           STA   VIAPCR     ;Apple's vectors, allow switching segments (CB2 hi)
                    >366  
E0CA56: 20 C6 CF    >367           JSR   TRANSFR0   ;ZPAGESAVE, SETMSTAT, DISPON
E0CA59: 7E          >368           DFB   WARMINITC  ;code
E0CA5A: 4C 23 CF    >369           JMP   GETCOM0    
                    >370  
                    >371  ********************************
                    >372  *  COMDTR
                    >373  *  Performs same as COMDST but does not display registers.
                    >374  ********************************
                    >375  
            =E0CA5D >376  COMDTR   EQU   *          
E0CA5D: 08          >377           PHP              
E0CA5E: 38          >378           SEC              
E0CA5F: 6E B9 C9    >379           ROR   STFLAG     ; set ST flag to not display registers
E0CA62: 28          >380           PLP              
E0CA63: 80 06 =CA6B >381           BRA   TRCONT     
                    >382  
                    >383  ********************************
                    >384  *  COMDEX
                    >385  ********************************
                    >386  
E0CA65: 8D 9E C8    >387  COMDEX   STA   EFLAG      
                    >388  
                    >389  ********************************
                    >390  *  COMDST
                    >391  ********************************
                    >392  
            =E0CA68 >393  COMDST   EQU   *          
E0CA68: 9C B9 C9    >394           STZ   STFLAG     ; set ST flag to display registers
                    >395  
E0CA6B: F0 21 =CA8E >396  TRCONT   BEQ   TRACE1     ;NO, DO ONE TRACE
                    >397  ECOMMAND                  
E0CA6D: 20 C6 CF    >398           JSR   TRANSFR0   ;READ NUMBER
E0CA70: 09          >399           DFB   CHKREADC   ;code
E0CA71: 90 0C =CA7F >400           BCC   LOADT      ;IF VALID
E0CA73: A9 04       >401  BADPAR0  LDA   #BADPAR    ;ERROR NUMBER
                    >402  
                    >403  ERREXIT0                  
E0CA75: 2C 00 CF    >404           BIT   $CF00      ;ENABLE EXT RAM
E0CA78: 20 C6 CF    >405           JSR   TRANSFR0   ;INVALID COMMAND
E0CA7B: 2D          >406           DFB   ERRBEEPC   ;CODE BYTE
E0CA7C: 4C 23 CF    >407           JMP   GETCOM0    
                    >408  
E0CA7F:             >409  LOADT    MEMORY16         
E0CA7F: C2 20       >409           REP   #$20       
                    >409           <<<              
E0CA81: AD 30 C8    >410           LDA   LETTER1    
E0CA84: 8D 90 C8    >411           STA   TCOUNT     ;LOAD TRACE COUNT
E0CA87:             >412           MEMORY8          
E0CA87: E2 20       >412           SEP   #$20       
                    >412           <<<              
E0CA89: 80 0B =CA96 >413           BRA   STEP1      ;LOOK FOR BREAK
                    >414  
                    >415  ********************************
                    >416  *  COMDER
                    >417  ********************************
                    >418  
E0CA8B: 8D A0 C8    >419  COMDER   STA   RTSFLAG    
                    >420  
            =0000   >421  S_TRACE1 =     ]segnum    ;segment number of command
E0CA8E: 9C 91 C8    >422  TRACE1   STZ   TCOUNT+1   
E0CA91: A2 01       >423           LDX   #1         
E0CA93: 8E 90 C8    >424           STX   TCOUNT     ;SET TCOUNT FOR ONE TRACE
                    >425  
                    >426  *---------------------------------------------
                    >427  * Do 1 instruction, even our REAL break, don't stop even if break count
                    >428  * reaches zero, then go to the NMITRC vector location.
                    >429  * This allows continuing through a break with TR, EX & ER
                    >430  
            =0000   >431  S_STEP1  =     ]segnum    ;segment number of this routine
E0CA96: 38          >432  STEP1    SEC              
E0CA97: B0 01 =CA9A >433           BCS   LTRACEVC   
                    >434  
                    >435  *-----------------------------
                    >436  * Do 1 instruction, even our real break, but
                    >437  * stop if the break count reaches zero, else goto NMITRC.
                    >438  
E0CA99: 18          >439  LOOKBRK  CLC              
                    >440  
            =0000   >441  S_LTRACE =     ]segnum    ;segment number of this command
                    >442  LTRACEVC                  
E0CA9A: 6E 46 C8    >443           ROR   STOPBRK    ;<$80=STOP IF TOGOFLG=0,>$7F=DON'T STOP
E0CA9D: 20 C6 CF    >444           JSR   TRANSFR0   ;IF OUR BRK, DEC TOGO
E0CAA0: 22          >445           DFB   DECTGPCC   ;code
E0CAA1: 30 23 =CAC6 >446           BMI   TRACEN     ;NOT BREAK OR NOT OURS
E0CAA3: 08          >447           PHP              ;SAVE STATUS
                    >448  
E0CAA4: 38          >449           SEC              
E0CAA5: 6E 99 C8    >450           ROR   BRKWFLG    ;NEED TO UPDATE THE BRK WINDOW
                    >451  
E0CAA8: 2C 46 C8    >452           BIT   STOPBRK    ;STOP IF TOGOFLG = 0 ?
E0CAAB: 30 09 =CAB6 >453           BMI   :CONT      ;IF > $7F THEN DON'T STOP
                    >454  
E0CAAD: AD 0D C9    >455           LDA   TOGOFLG    ;TOGO = 0 ?
E0CAB0: D0 04 =CAB6 >456           BNE   :CONT      ;IF NO
E0CAB2: 68          >457           PLA              
E0CAB3: 4C C6 CB    >458           JMP   TRACEND    ;STOP & DISPLAY REGISTERS
E0CAB6: 28          >459  :CONT    PLP              
E0CAB7: D0 0D =CAC6 >460           BNE   TRACEN     ;IMPLIED BRK
                    >461  
                    >462  * Disable HARD break so the soft break is not lost
E0CAB9: A9 02       >463           LDA   #$02       
E0CABB: 1C 43 C8    >464           TRB   IERBUFF    ;disable button interrupt
                    >465  
E0CABE: 20 C6 CF    >466           JSR   TRANSFR0   ;REPLACE THE 00 WITH ORIGINAL INSTRUCTION BYTE
E0CAC1: 42          >467           DFB   REPLACEC   ;CODE BYTE
E0CAC2: 38          >468           SEC              
E0CAC3: 6E A9 C8    >469           ROR   BRKTRFLG   ;indicate we are tracing through one of our breaks
                    >470  
                    >471  *-------------------------------------------------
                    >472  * Trace N instructions of the target program
                    >473  
                    >474  TRACEN                    
                    >475  
                    >476  * Check realtime & program only windows
                    >477  
E0CAC6: 2C 94 C8    >478           BIT   REALTIME   ;ARE REALTIME RANGES SET ?
E0CAC9: 30 05 =CAD0 >479           BMI   :CHKPWIN   ;IF YES CHECK PROT WINDOW
E0CACB: 2C 95 C8    >480           BIT   PROGONLY   ;ARE PROGRAM ONLY RANGES SET ?
E0CACE: 10 34 =CB04 >481           BPL   :NOPR      ;IF NO
                    >482  
                    >483  * If YES, K/PC must be inside program only range to be executed
                    >484  
E0CAD0: A2 1E       >485  :CHKPWIN LDX   #30        
E0CAD2: BD D1 C8    >486  :CHECK   LDA   PROTADR,X  ;GET PROT TYPE
E0CAD5: C9 D4       >487           CMP   #"T"       ;CODE TRACE RANGE ?
E0CAD7: D0 0C =CAE5 >488           BNE   :CHKP      ;IF NO
E0CAD9: 20 C6 CF    >489           JSR   TRANSFR0   ;IN RANGE ?
E0CADC: 4D          >490           DFB   CHKRANGC   ;code
E0CADD: 90 10 =CAEF >491           BCC   :NEXT      ;IF NO
E0CADF: 9C 9C C8    >492           STZ   COMRTFLG   ;COMDRT NOT active (7=0), FROM PROTWIND (6=0)
E0CAE2: 4C 42 CB    >493           JMP   NMICOMRT   ;IF YES, RUN SUBROUTINE IN REALTIME
E0CAE5: C9 D0       >494  :CHKP    CMP   #"P"       ;PROGRAM ONLY RANGE ?
E0CAE7: D0 06 =CAEF >495           BNE   :NEXT      
E0CAE9: 20 C6 CF    >496           JSR   TRANSFR0   ;IN RANGE ?
E0CAEC: 4D          >497           DFB   CHKRANGC   ;code
E0CAED: B0 15 =CB04 >498           BCS   :NOPR      ;IF YES, CONTINUE TRACE
E0CAEF: 38          >499  :NEXT    SEC              
E0CAF0: 8A          >500           TXA              
E0CAF1: E9 06       >501           SBC   #6         ;NEXT TYPE
E0CAF3: AA          >502           TAX              
E0CAF4: 10 DC =CAD2 >503           BPL   :CHECK     
                    >504  
                    >505  * OUT OF RANGES. If PROG only flag is set and we are here, we must be
                    >506  * outside PROG only window, so stop tracing & indicate outside PROG range.
                    >507  
E0CAF6: 2C 95 C8    >508           BIT   PROGONLY   ;ARE PROGRAM ONLY RANGES SET ?
E0CAF9: 10 09 =CB04 >509           BPL   :NOPR      ;IF NO
E0CAFB: 20 C6 CF    >510           JSR   TRANSFR0   ;OUTSIDE PROG RANGE
E0CAFE: 1C          >511           DFB   OUTPRGRC   ;code
E0CAFF: 90 03 =CB04 >512           BCC   :NOPR      ;OUR SLOT I/O SPACE IS OK
E0CB01: 4C D0 CB    >513           JMP   COMDDR     
                    >514  
                    >515  :NOPR                     
                    >516  * LDA MSTATE
                    >517  * STA OLDMSTAT ;SAVE OLD MSTATE
                    >518  
E0CB04: 20 3F CC    >519           JSR   LDAPBRIY   ;GET BYTE AT PBR/PC
E0CB07: 8D 3F C8    >520           STA   USEROPCD   ;SAVE USER'S OPCODE
E0CB0A: D0 1D =CB29 >521           BNE   :NOTBRK    ;IF NOT BRK
                    >522  
                    >523  * Is BRK out realtime BRK ?
                    >524  
E0CB0C: 2C 93 C8    >525           BIT   RTBRKFLG   
E0CB0F: 10 12 =CB23 >526           BPL   :HALTBRK   ;if not realtime
E0CB11:             >527           INDEX16          ;16 BIT
E0CB11: C2 10       >527           REP   #$10       
                    >527           <<<              
E0CB13: AE 17 C8    >528           LDX   STACK      ;IS THIS OUR REALTIME BRK
E0CB16: EC 5A C8    >529           CPX   RTSTACK    ;STACK AT PRE REALTIME LOCAL ?
E0CB19:             >530           INDEX8           ;8 BIT
E0CB19: E2 10       >530           SEP   #$10       
                    >530           <<<              
E0CB1B: D0 06 =CB23 >531           BNE   :HALTBRK   ;if not, halt
E0CB1D: 20 C6 CF    >532           JSR   TRANSFR0   ;RESTORE CHANGED STUFF
E0CB20: 45          >533           DFB   RESTRTC    ;code
E0CB21: 50 03 =CB26 >534           BVC   :RTWIND    ;IF RESULT OF T range
                    >535  :HALTBRK                  
E0CB23: 4C D0 CB    >536           JMP   COMDDR     ;END COMDRT
E0CB26: 4C 75 CB    >537  :RTWIND  JMP   NMITRC     ;CONTINUE WITH WHATEVER
                    >538  
E0CB29:             >539  :NOTBRK  INDEX16          
E0CB29: C2 10       >539           REP   #$10       
                    >539           <<<              
E0CB2B: AE 17 C8    >540           LDX   STACK      
E0CB2E: 8E 5A C8    >541           STX   RTSTACK    ;save current stack for possible use by realtime
E0CB31:             >542           INDEX8           
E0CB31: E2 10       >542           SEP   #$10       
                    >542           <<<              
E0CB33: A9 80       >543           LDA   #$80       
E0CB35: 0C 92 C8    >544           TSB   TFLAG      ;TFLAG, enable T: mode
E0CB38: 0C A8 C8    >545           TSB   TRACFLAG   ;trace is active
                    >546  
E0CB3B: 20 C6 CF    >547           JSR   TRANSFR0   
E0CB3E: 52          >548           DFB   TRSETVIAC  ;set VIA for trace
                    >549  
E0CB3F: 4C 9F CC    >550           JMP   EXECUTE    ;RESTORE REGISTERS AND RUN PROGRAM.
                    >551  
                    >552  *----------------------------------------
                    >553  * Come here after tracing 1 instruction to continue COMDRT
                    >554  
E0CB42: 20 C6 CF    >555  NMICOMRT JSR   TRANSFR0   ;SET UP FOR REALTIME & GOTO EXECUTE
E0CB45: 3D          >556           DFB   SETUPRTC   ;code
                    >557  
                    >558  * Returns if an error occurs.
E0CB46: A0 01       >559           LDY   #1         ;position error message
E0CB48: 50 04 =CB4E >560           BVC   :NOROM     
E0CB4A: A9 30       >561           LDA   #BADRT     ;JSL not allowed with RT or T range in 8 bit mode
E0CB4C: 80 02 =CB50 >562           BRA   :TOERR     
                    >563  
                    >564  * A BRK could not be placed at the instruction pointed to by the
                    >565  * stacked return address.
E0CB4E: A9 20       >566  :NOROM   LDA   #WRITFAIL  ;Not able to write to desired location
E0CB50: 4C 75 CA    >567  :TOERR   JMP   ERREXIT0   
                    >568  
                    >569  *-------------------------------------------------
                    >570  * If TRace causes an NMI the NMI handler routine sends
                    >571  * the program to NMITRC.
                    >572  
E0CB53: A9 02       >573  BRKTRC   LDA   #$02       
E0CB55: 0C 43 C8    >574           TSB   IERBUFF    ;reenable button interrupt
E0CB58: AD 32 C8    >575           LDA   LETTER3    ;ADDRESS WAS PUT IN LETTER 3,2,1
E0CB5B: 8D 3C C8    >576           STA   DBRDDT     ;BY VALIDPC OR DECTGPC
E0CB5E:             >577           MEMORY16         
E0CB5E: C2 20       >577           REP   #$20       
                    >577           <<<              
E0CB60: AD 30 C8    >578           LDA   LETTER1    
E0CB63: 8D 18 C9    >579           STA   LOWADD     
E0CB66:             >580           MEMORY8          
E0CB66: E2 20       >580           SEP   #$20       
                    >580           <<<              
E0CB68: A0 00       >581           LDY   #0         
E0CB6A: 98          >582           TYA              
E0CB6B: 20 55 CC    >583           JSR   STAINDY    ;PUT BREAK BACK IN
E0CB6E: EE F8 C8    >584           INC   POINT      ;POINT TO OLD BRK INFO
E0CB71: EE F7 C8    >585           INC   REALBRK    ;REAL BRK COUNT
E0CB74: 60          >586           RTS              
                    >587  
                    >588  *-------------------------------------------------
                    >589  * Continue after NMI from Trace
                    >590  
E0CB75: 9C A8 C8    >591  NMITRC   STZ   TRACFLAG   ;clear Trace active flag
E0CB78: A9 80       >592           LDA   #$80       
E0CB7A: 1C A9 C8    >593           TRB   BRKTRFLG   ;are we tracing our real break?
E0CB7D: F0 03 =CB82 >594           BEQ   :NOBRK     ;if no
E0CB7F: 20 53 CB    >595           JSR   BRKTRC     ;if yes
                    >596  
E0CB82: A9 80       >597  :NOBRK   LDA   #$80       
E0CB84: 1C 9F C8    >598           TRB   GOFLAG     ;was command GO?
E0CB87: F0 03 =CB8C >599           BEQ   :NOGO      ;if no
E0CB89: 4C 9F CC    >600           JMP   EXECUTE    ;if yes
                    >601  
E0CB8C: 1C 9C C8    >602  :NOGO    TRB   COMRTFLG   ;was COMDRT active?
E0CB8F: D0 B1 =CB42 >603           BNE   NMICOMRT   ;if yes
                    >604  
E0CB91: AD 9E C8    >605           LDA   EFLAG      ;WAS COMMAND EX ?
E0CB94: 30 4D =CBE3 >606           BMI   EXCONT     ;IF YES
                    >607  
E0CB96: 2C A0 C8    >608           BIT   RTSFLAG    ;ARE WE LOOKING FOR AN RTS
E0CB99: 10 0E =CBA9 >609           BPL   :CHKPAS    ;IF NO
E0CB9B: 20 45 CC    >610           JSR   LDAPCIY    ;GET INTRUCTION BYTE
E0CB9E: C9 6B       >611           CMP   #$6B       ;is it an RTL
E0CBA0: F0 04 =CBA6 >612           BEQ   :STOPEX    ;if yes
E0CBA2: C9 60       >613           CMP   #$60       ;is it an RTS
E0CBA4: D0 41 =CBE7 >614           BNE   CHKCTRLS   ;if no
E0CBA6: 4C D0 CB    >615  :STOPEX  JMP   COMDDR     ;IF YES STOP LOOKING AND DISPLAY REGISTERS.
                    >616  
                    >617  * Did we get here from the break handler ?
                    >618  
E0CBA9: 2C 9A C8    >619  :CHKPAS  BIT   PASSFLG    
E0CBAC: 10 06 =CBB4 >620           BPL   :CHKTS     ;IF NO
E0CBAE: 9C 9A C8    >621           STZ   PASSFLG    ;RESET
E0CBB1: 4C 9F CC    >622           JMP   EXECUTE    ;CONTINUE
                    >623  
E0CBB4: 2C A2 C8    >624  :CHKTS   BIT   TSFLAG     ;IS THIS COMDTS ?
E0CBB7: 30 63 =CC1C >625           BMI   DOSUB      ;IF YES
                    >626  
E0CBB9: 20 C6 CF    >627           JSR   TRANSFR0   ;DISPLAY REG'S FROM RAM & DISASSEM INSTRUCTION
E0CBBC: 96          >628           DFB   INITDISRC  ;CODE BYTE
                    >629  
                    >630  * Decrement Tcount
                    >631  
E0CBBD:             >632  SKIPREG  MEMORY16         
E0CBBD: C2 20       >632           REP   #$20       
                    >632           <<<              
E0CBBF: CE 90 C8    >633           DEC   TCOUNT     ;DECREMENT BY 1
E0CBC2:             >634           MEMORY8          
E0CBC2: E2 20       >634           SEP   #$20       
                    >634           <<<              
E0CBC4: D0 21 =CBE7 >635           BNE   MORETR     ;MORE TRACING
                    >636  
E0CBC6: 2C 9A C8    >637  TRACEND  BIT   PASSFLG    ;DID WE GET HERE FROM A BRK?
E0CBC9: 30 05 =CBD0 >638           BMI   COMDDR     ;IF YES
E0CBCB: 2C 9E C8    >639           BIT   EFLAG      ;ARE WE DOING EXECUTE N INSTRUCTIONS?
E0CBCE: 10 07 =CBD7 >640           BPL   LEAVTRC    ;IF NO
                    >641  
                    >642  **********************************
                    >643  *  COMDDR
                    >644  **********************************
                    >645  
E0CBD0: 9C B9 C9    >646  COMDDR   STZ   STFLAG     ; enable display of registers
E0CBD3: 20 C6 CF    >647           JSR   TRANSFR0   ;IF YES DISPLAY REGISTERS
E0CBD6: 96          >648           DFB   INITDISRC  ;CODE BYTE
E0CBD7: 9C 9E C8    >649  LEAVTRC  STZ   EFLAG      
E0CBDA: 9C A0 C8    >650           STZ   RTSFLAG    
E0CBDD: 9C 9A C8    >651           STZ   PASSFLG    
E0CBE0: 4C 23 CF    >652           JMP   GETCOM0    ;TRACE FINISHED
                    >653  
E0CBE3: C9 B0       >654  EXCONT   CMP   #"0"       ; EXECUTE PROGRAM UNTIL CTRL-X
E0CBE5: D0 D6 =CBBD >655           BNE   SKIPREG    ; EX COMMAND SO DON'T DISPLAY REGISTERS
                    >656  MORETR                    
                    >657  
                    >658  * Check for ctrl-S & esc
                    >659  
E0CBE7: 2C 24 C8    >660  CHKCTRLS BIT   IOMODE     ;I/O TO SERIAL?
E0CBEA: 30 14 =CC00 >661           BMI   :SERUSED   ;IF YES
E0CBEC: AD 00 C0    >662           LDA   KBD        ;READ KEYBOARD
E0CBEF: 10 28 =CC19 >663           BPL   TOTRACEN   ;NO KEYPRESSED SO CONTINUE
E0CBF1: CD BA C9    >664           CMP   KEY        ;IS IT STOP COMMAND
E0CBF4: D0 23 =CC19 >665           BNE   TOTRACEN   ;NO, CONTINUE
E0CBF6: 2C 10 C0    >666           BIT   KBDSTRB    ;YES, CLEAR KBD
E0CBF9: AD 00 C0    >667  :WAITKEY LDA   KBD        ;READ KEYBOARD
E0CBFC: 10 FB =CBF9 >668           BPL   :WAITKEY   ;WAIT FOR KEYPRESS
E0CBFE: 30 15 =CC15 >669           BMI   CHKESC     ;KEY PRESSED
                    >670  
                    >671  * USE serial I/O
E0CC00: A9 01       >672  :SERUSED LDA   #$1        ;request code, 'is input ready?'
E0CC02: 20 C6 CF    >673           JSR   TRANSFR0   ;get serial I/O status
E0CC05: 6E          >674           DFB   STATPASCC  ;code
E0CC06: 90 11 =CC19 >675           BCC   TOTRACEN   ;no keypress
E0CC08: 20 C6 CF    >676           JSR   TRANSFR0   ;get serial data
E0CC0B: 66          >677           DFB   INPASCALC  ;code
E0CC0C: CD BA C9    >678           CMP   KEY        ;IS IT stop command?
E0CC0F: D0 04 =CC15 >679           BNE   CHKESC     ;IF NO
E0CC11: 20 C6 CF    >680  WAITSSC  JSR   TRANSFR0   ;WAIT FOR KEYPRESS
E0CC14: 4F          >681           DFB   RECEIVEC   ;code
                    >682  
                    >683  * Was it esc ?
                    >684  
E0CC15: C9 9B       >685  CHKESC   CMP   #ESC       ;IS IT ESC
E0CC17: F0 B7 =CBD0 >686           BEQ   COMDDR     ;YES, STOP TRACE
E0CC19: 4C 99 CA    >687  TOTRACEN JMP   LOOKBRK    ;NO, CONTINUE
                    >688  
                    >689  *-------------------------------------------------
                    >690  * Do the user's subroutine and stop if carry is set.
                    >691  
E0CC1C: AD 1E C8    >692  DOSUB    LDA   STATUS     
E0CC1F: 09 04       >693           ORA   #$04       ;set I flag
E0CC21: 48          >694           PHA              
E0CC22:             >695           MX16             
E0CC22: C2 30       >695           REP   #$30       
                    >695           <<<              
E0CC24: AE 13 C8    >696           LDX   XREG       ;RESTORE REGISTERS
E0CC27: AC 15 C8    >697           LDY   YREG       
E0CC2A: AD 11 C8    >698           LDA   ACC        
E0CC2D: 28          >699           PLP              ;RESTORE STATUS
E0CC2E: 22 3C CC E0 >700           JSL   USERSUB    ;DO USER SUB
                    >701  
                    >702  * Come here after user's RTL
                    >703  
E0CC32: D8          >704  USERRTS  CLD              ;IN CASE SET BY USER
E0CC33:             >705           MX8              
E0CC33: E2 30       >705           SEP   #$30       
                    >705           <<<              
E0CC35: 90 B0 =CBE7 >706           BCC   CHKCTRLS   ;CONTINUE
E0CC37: 4E A2 C8    >707           LSR   TSFLAG     ;CLEAR TSFLAG
E0CC3A: 80 94 =CBD0 >708           BRA   COMDDR     ;STOP
                    >709  
E0CC3C: DC 4A C8    >710  USERSUB  JMP   [SUBTRACE] 
                    >711  
                    >712  *-------------------------------------------------
                    >713  *  LOCAL SUBROUTINES
                    >714  *-------------------------------------------------
                    >715  
                    >716           MX    %11        
                    >717  
                    >718  *---------------------------------------------------
                    >719  ***** STAINDY AND LDAINDY MAY NOT BE USED TO CHANGE
                    >720  ***** DISPLAY OR OTHER SOFT SWITCHES.
                    >721  
                    >722  LDAPBRIY                  ;LOAD BYTE AT PBR/PC
E0CC3F: AD 21 C8    >723           LDA   PBR        
E0CC42: 8D 3C C8    >724           STA   DBRDDT     ;BANK TO ACCESS
E0CC45:             >725  LDAPCIY  MEMORY16         
E0CC45: C2 20       >725           REP   #$20       
                    >725           <<<              
E0CC47: AD 1F C8    >726           LDA   PCLO       ;LOAD PC
E0CC4A: 8D 18 C9    >727           STA   LOWADD     
E0CC4D:             >728           MEMORY8          
E0CC4D: E2 20       >728           SEP   #$20       
                    >728           <<<              
E0CC4F: A0 00       >729           LDY   #0         
                    >730  
                    >731  *---------------------------------
                    >732  * LDA LOWADD,X FROM CARD I/O SPACE
                    >733  
E0CC51: A9 BF       >734  LDAINDY  LDA   #$BF       ;LDAL OP,X OPCODE
E0CC53: 80 05 =CC5A >735           BRA   CARDSLT1   
                    >736  
                    >737  *---------------------------------
                    >738  * STA LOWADD,X FROM CARD I/O SPACE
                    >739  
E0CC55: 8D 1C C9    >740  STAINDY  STA   STAISAV    ;save value to store
E0CC58: A9 9F       >741           LDA   #$9F       ;STAL OP,X OPCODE
                    >742  
E0CC5A: DA          >743  CARDSLT1 PHX              ;SAVE, restored by SLOTRTS
E0CC5B: 5A          >744           PHY              ;save
E0CC5C: EB          >745           XBA              ;save opcode
                    >746  
E0CC5D: AD 17 C9    >747           LDA   CXSTATUS   ;get CXROM status
E0CC60: 2A          >748           ROL              ;set Carry with CXSTATUS  
                    >749  
E0CC61: 0B          >750           PHD              ;save
                    >751  
E0CC62: AD 3C C8    >752           LDA   DBRDDT     ;data bank to access
E0CC65: 5B          >753           TCD              ;D = opcode, DBR
                    >754  
E0CC66: AE 29 C8    >755           LDX   SLOTN0     
E0CC69:             >756           INDEX16          
E0CC69: C2 10       >756           REP   #$10       
                    >756           <<<              
E0CC6B: AC 18 C9    >757           LDY   LOWADD     ;address to access
                    >758  
                    >759  ******************************************
                    >760  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >761  ******************************************
E0CC6E: A9 80       >762           LDA   #%10000000 ;RAM8, ROM0
E0CC70: 9D 88 C0    >763           STA   SEGMBASE,X 
                    >764  
E0CC73: A9 07       >765           LDA   #$07       ;default to CX on
E0CC75: B0 02 =CC79 >766           BCS   :CXON      ;if yes
E0CC77: A9 06       >767           LDA   #$06       
E0CC79: 8D 81 C8    >768  :CXON    STA   IOCX8      
                    >769  
E0CC7C: 8C 85 C8    >770           STY   IOLADRS    ;address to access
E0CC7F: 7B          >771           TDC              
E0CC80: 8D 87 C8    >772           STA   IODBR      ;bank to access
E0CC83: EB          >773           XBA              
E0CC84: 8D 84 C8    >774           STA   IOOPCD     ;put LDA/STA opcode
E0CC87:             >775           INDEX8           
E0CC87: E2 10       >775           SEP   #$10       
                    >775           <<<              
                    >776  
                    >777  ******************************************
                    >778  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >779  ******************************************
E0CC89: 9E 88 C0    >780           STZ   SEGMBASE,X ;RAM0, ROM0
                    >781  
E0CC8C: 2B          >782           PLD              
E0CC8D: 7A          >783           PLY              ;restore
E0CC8E: BB          >784           TYX              ;routine now does STA,X
                    >785  
E0CC8F: AD 1C C9    >786           LDA   STAISAV    ;for STA this restores value to store
E0CC92: 20 30 CD    >787           JSR   AX2S1_B    ;Acc & X to SEG1 RAM, set CX & slot switch
                    >788  
E0CC95: 20 61 CD    >789           JSR   EXCHZPAG   ;Exchange ZERO page locations
E0CC98: AE 29 C8    >790           LDX   SLOTN0     ;slot number n0
E0CC9B: 18          >791           CLC              ;keep in emulation mode
E0CC9C: 4C 04 CD    >792           JMP   TOC0N0IO   ;go to I/O routines in C0n0 space
                    >793  
                    >794  *--------------------------------
                    >795  *  EXECUTE
                    >796  *  Go run the user's code at (PBR)/PCHI PCLO
                    >797  * !!!! WARNING !!!! Stack must NOT be in DDTRAM when AX2S1_A is executed
                    >798  *--------------------------------
                    >799  
                    >800  EXECUTE                   
                    >801  
                    >802  * Restore the text page & Replace the interrupt vectors if VECTORS=0
                    >803  * Setup SEG7 I/O routine
E0CC9F: 20 C6 CF    >804           JSR   TRANSFR0   
E0CCA2: 16          >805           DFB   RESTSTUFC  ;code
                    >806  
E0CCA3: 20 25 CD    >807           JSR   AX2S1_A    ;Save ACC & XREG to SEG1 RAM
                    >808  
                    >809  * Restore the user's stack
E0CCA6:             >810           INDEX16          
E0CCA6: C2 10       >810           REP   #$10       
                    >810           <<<              
E0CCA8: A2 9E C9    >811           LDX   #DDTSTACK  
E0CCAB: 9A          >812           TXS              ;PUT STACK IN DDT RAM
E0CCAC: 20 54 CE    >813           JSR   STACKRES   ;RESTORE USER'S STACK
                    >814  * stackres returns with MX16
                    >815           MX    %00        
                    >816  
                    >817  * Restore part of the registers
E0CCAF:             >818           MEMORY8          
E0CCAF: E2 20       >818           SEP   #$20       
                    >818           <<<              
E0CCB1: AE 19 C8    >819           LDX   DREG       ;GET DIRECT REG.
E0CCB4: DA          >820           PHX              
E0CCB5: 2B          >821           PLD              ;RESTORE DIRECT REG.
E0CCB6: AD 1B C8    >822           LDA   DBR        ;DATA BANK REGISTER
E0CCB9: 48          >823           PHA              ;PULLED BELOW
E0CCBA: AC 15 C8    >824           LDY   YREG       ;Restore 8 or 16 bit Y
                    >825  
                    >826  * Initialize VIA
E0CCBD: A9 DE       >827           LDA   #%11011110 ;CB2 LOW, CB1 POS EDGE, CA2 HI, CA1 NEG EDGE
E0CCBF: 8D 0C C8    >828           STA   VIAPCR     ;REPLACE APPLE'S VECTORS
                    >829  
                    >830  * Carry flag remains unchanged until used.
E0CCC2: AD 1B C9    >831           LDA   EMULATE    
E0CCC5: 2A          >832           ROL              ;SET CARRY WITH EMULATION FLAG
                    >833  
                    >834  * Setup ACC for segment change
E0CCC6: A9 00       >835           LDA   #0         
E0CCC8: EB          >836           XBA              ;make upper byte 0
E0CCC9: AD 29 C8    >837           LDA   SLOTN0     
                    >838  
                    >839  * Finish restoring registers
E0CCCC: AE 17 C8    >840           LDX   STACK      ;GET USER'S STACK
E0CCCF: AB          >841           PLB              ;RESTORE USER'S DATA BANK
E0CCD0: 9A          >842           TXS              ;RESTORE USER'S STACK
                    >843  
E0CCD1: AA          >844           TAX              ;setup with slotn0 above
                    >845  
E0CCD2: FB          >846           XCE              ;restore user's mode so stack works the same
E0CCD3: AF 21 C8 E0 >847           LDAL  PBR        
E0CCD7: D0 08 =CCE1 >848           BNE   :DOPBR     ;native mode or 8 bit code in non zero bank
E0CCD9: AF 1B C9 E0 >849           LDAL  EMULATE    ;was PBR really 0 in native mode?
E0CCDD: 30 03 =CCE2 >850           BMI   :EMUL      ;skip PBR if emulation mode
E0CCDF: A9 00       >851           LDA   #0         ;native mode PBR was 0
E0CCE1: 48          >852  :DOPBR   PHA              
E0CCE2: AF 20 C8 E0 >853  :EMUL    LDAL  PCHI       
E0CCE6: 48          >854           PHA              
E0CCE7: AF 1F C8 E0 >855           LDAL  PCLO       ;put RTI stuff on user's stack
E0CCEB: 48          >856           PHA              
E0CCEC: AF 1E C8 E0 >857           LDAL  STATUS     
E0CCF0: 0F A5 C8 E0 >858           oraL  Iflag      ; include interrupt mask flag
E0CCF4: 48          >859           PHA              
E0CCF5: FB          >860           XCE              ;return to native mode
                    >861  * Index may be 8 bit but that is OK.
                    >862  
E0CCF6: A9 FF       >863           LDA   #$FF       
E0CCF8: 8F 0D C8 E0 >864           STAL  VIAIFR     ;CLEAR OLD INTERRUPT FLAGS
E0CCFC: AF 43 C8 E0 >865           LDAL  IERBUFF    ;GET INTERRUPT FLAGS FROM BUFFER
E0CD00: 8F 0E C8 E0 >866           STAL  VIAIER     ;ENABLE INTERRUPTS
                    >867  
                    >868  ******************************************
                    >869  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >870  ******************************************
                    >871  
                    >872  *----------------------------------------
                    >873  * Alternate entry point for C0n0IO routines.
                    >874  * Enter here from TOGSINT to return control to the GS interrupt handler when
                    >875  * we trapped an interrupt that was not ours.
                    >876  * Also used by STA/LDAINDY
                    >877  * Enter with MX %10
                    >878  
                    >879  TOC0N0IO                  
E0CD04: A9 10       >880           LDA   #%00010000 ;RAM1, ROM0
E0CD06: 9F 88 C0 E0 >881           STAL  SEGMBASE,X 
                    >882  
E0CD0A:             >883           MEMORY16         
E0CD0A: C2 20       >883           REP   #$20       
                    >883           <<<              
E0CD0C: AF 13 C8 E0 >884           LDAL  XREG1      
E0CD10: AA          >885           TAX              ;restore X reg
E0CD11: AF 11 C8 E0 >886           LDAL  ACC1       ;restore upper byte of Acc
E0CD15:             >887           MEMORY8          
E0CD15: E2 20       >887           SEP   #$20       
                    >887           <<<              
                    >888  
E0CD17: A9 00       >889           LDA   #0         
                    >890  *********************************
                    >891  * TIME CRITICAL CODE
                    >892  *********************************
E0CD19: 8F 09 C8 E0 >893           STAL  VIAT2CH    ;FOR EXECUTION TIME, DOES NOT CAUSE NMI
                    >894  
E0CD1D: AF 11 C8 E0 >895           LDAL  ACC1       ;load low byte with seg # for I/O transfer
E0CD21: FB          >896           XCE              ;restore emulation bit
E0CD22: 6C 15 C8    >897           JMP   (TOSLOTC0) ;Goto slotC0 routines
                    >898  
                    >899           MX    %11        
                    >900  
                    >901  
                    >902  ********************************************************************
                    >903  * Save ACC & XREG to ACC1 & XREG1 in segment 1
                    >904  * !!!! Alert !!!! If the stack is in DDT ram then the Acc. will not be
                    >905  * saved in SEG1 ram.
                    >906  
E0CD25:             >907  AX2S1_A  INDEX16          
E0CD25: C2 10       >907           REP   #$10       
                    >907           <<<              
E0CD27: 18          >908           CLC              ;C=0 = Execute
E0CD28: AD 12 C8    >909           LDA   ACC+1      ;hi byte
E0CD2B: AE 13 C8    >910           LDX   XREG       
E0CD2E: 80 03 =CD33 >911           BRA   AX2S1_C    
                    >912  
                    >913  * LDA/STA entry: Save Acc & X
E0CD30:             >914  AX2S1_B  INDEX16          
E0CD30: C2 10       >914           REP   #$10       
                    >914           <<<              
E0CD32: 38          >915           SEC              ;C=1 = LDA/STA
E0CD33: EB          >916  AX2S1_C  XBA              ;put in HI byte
E0CD34: 5A          >917           PHY              ;save Y
E0CD35: 0B          >918           PHD              ;save direct reg
E0CD36: 9B          >919           TXY              
                    >920  
                    >921  * Setup SEG1 EX routine
                    >922  
E0CD37: AF F8 07 00 >923           LDAL  CNSLOT     ;last active peripheral slot
E0CD3B: 5B          >924           TCD              ;use direct reg as temp storage
                    >925  
                    >926  ******************************************
                    >927  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >928  ******************************************
E0CD3C: A9 00       >929           LDA   #0         
E0CD3E: EB          >930           XBA              
E0CD3F: AD 29 C8    >931           LDA   SLOTN0     
E0CD42: AA          >932           TAX              
E0CD43: A9 10       >933           LDA   #%00010000 ;RAM1, ROM0
E0CD45: 9D 88 C0    >934           STA   SEGMBASE,X 
                    >935  
E0CD48: 7B          >936           TDC              ;stored in direct reg
E0CD49: 8D 88 C8    >937           STA   IOUSER     ;setup I/O routine
                    >938  
E0CD4C: 8C 13 C8    >939           STY   XREG1      ;needed to restore X
                    >940  
E0CD4F: A9 70       >941           LDA   #$70       ;default to SEG 7 for part 2 of I/O
E0CD51: 90 02 =CD55 >942           BCC   :EXEC      ;if execute
E0CD53: A9 80       >943           LDA   #$80       ;LDA/STA continues in SEG 8 
E0CD55: A8          >944  :EXEC    TAY              
E0CD56: 8C 11 C8    >945           STY   ACC1       ;needed to restore ACC hi byte & SEG part 2
                    >946  
                    >947  ******************************************
                    >948  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >949  ******************************************
E0CD59: 9E 88 C0    >950           STZ   SEGMBASE,X ;RAM0, ROM0
E0CD5C: 2B          >951           PLD              ;restore direct reg
E0CD5D: 7A          >952           PLY              ;restore Y
E0CD5E:             >953           MX8              
E0CD5E: E2 30       >953           SEP   #$30       
                    >953           <<<              
E0CD60: 60          >954           RTS              
                    >955  
                    >956  *---------------------------------------------
                    >957  *EXCHANGE ZERO PAGE RAM SO IT GETS UPDATED PROPERLY
                    >958  
E0CD61: 48          >959  EXCHZPAG PHA              ;SAVE REGISTERS
E0CD62: DA          >960           PHX              
E0CD63: 5A          >961           PHY              
                    >962  
E0CD64: A2 03       >963           LDX   #3         ;4 BYTES
E0CD66: BD FB C8    >964  :NEXT    LDA   BASBUF,X   ;GET FROM DDT BUFFER
E0CD69: B4 28       >965           LDY   BASL,X     ;GET FROM APPLE'S RAM
E0CD6B: 95 28       >966           STA   BASL,X     ;PUT IN APPLE'S RAM
E0CD6D: 98          >967           TYA              
E0CD6E: 9D FB C8    >968           STA   BASBUF,X   ;PUT IN DDT BUFFER
E0CD71: CA          >969           DEX              
E0CD72: 10 F2 =CD66 >970           BPL   :NEXT      
                    >971  
E0CD74: 7A          >972           PLY              ;RESTORE REGISTERS
E0CD75: FA          >973           PLX              
E0CD76: 68          >974           PLA              
                    >975  
E0CD77: 60          >976           RTS              
                    >977  
                    >978           MX    %11        ;8 BIT
                    >979  
                    >980  *----------------------------------------
                    >981  * Restore registers for DDT operation. Used by SAVEREG & CMDDORTS
                    >982  
E0CD78: 18          >983  RTSREST  CLC              
E0CD79: FB          >984           XCE              ;native mode
E0CD7A: E2 24       >985           SEP   #$24       ;MEMORY8 + SEI, no interrupts while in DDT
                    >986  
                    >987           do    debug      ;keep in bank 00 for APW debugger to work
                    >988           PEA   #$0000     
                    >989           else             ;use bank #$E0 for normal operation
E0CD7C: F4 E0 E0    >990           PEA   #$E0E0     
                    >991           fin              ;finish of conditional
                    >992  
E0CD7F: AB          >993           PLB              
E0CD80: AB          >994           PLB              ;SET DATA BANK
E0CD81: 60          >995           RTS              
                    >996  
                    >997  ***********************************
                    >998  * SAVE REGISTERS
                    >999  * set native mode
                    >1000 * 5-1-91 Acc is saved before coming here.
                    >1001 
E0CD82: 08          >1002 SAVEREG  PHP              ;save status
E0CD83: 20 78 CD    >1003          JSR   RTSREST    ;native mode, set DBR
E0CD86: 6E 1B C9    >1004          ROR   EMULATE    ;SET EMULATION FLAG
E0CD89: 68          >1005          PLA              
E0CD8A: 8D 1E C8    >1006          STA   STATUS     
                    >1007 
E0CD8D:             >1008          INDEX16          ;16 BIT
E0CD8D: C2 10       >1008          REP   #$10       
                    >1008          <<<              
E0CD8F: 8E 13 C8    >1009          STX   XREG       
E0CD92: 8C 15 C8    >1010          STY   YREG       
E0CD95: FA          >1011          PLX              ;GET RETURN ADDRESS
E0CD96: 8E A1 C9    >1012          STX   TEMP       
E0CD99: BA          >1013          TSX              
E0CD9A: 8E 17 C8    >1014          STX   STACK      ;save user's stack
E0CD9D: 80 40 =CDDF >1015          BRA   SAVEWSTK   ;save work stack space
                    >1016 
                    >1017 *----------------------------------------
                    >1018 * save Stack, D & set stack pointer to working area.
                    >1019 * enter with MX16
                    >1020 
                    >1021          MX    %00        
            =0000   >1022 S_SAVEST =     ]segnum    
                    >1023 SAVESTK                   
E0CD9F: BA          >1024          TSX              
E0CDA0: 8E 17 C8    >1025          STX   STACK      ;SAVE USER'S STACK
                    >1026 
                    >1027 * Restore User's stack RAM that was disturbed by interrupt stuff.
                    >1028 
E0CDA3: 8A          >1029          TXA              ;CURRENT POINTER
E0CDA4: 38          >1030          SEC              
E0CDA5: ED 5E C8    >1031          SBC   OLDSTACK   ;CURRENT POINTER - OLD POINTER
                    >1032 
E0CDA8: 2C 1A C9    >1033          BIT   EMULATE-1  ;WORD TEST
E0CDAB: 10 0B =CDB8 >1034          BPL   :NATIV     
E0CDAD: 09 00 FF    >1035          ORA   #$FF00     ;MAKE NEGATIVE
E0CDB0: 89 80 00    >1036          BIT   #$0080     ;TEST SIGN OF LOW BYTE
E0CDB3: D0 03 =CDB8 >1037          BNE   :NATIV     ;IF NEG, KEEP IN SIGN EXTENDED FORM
E0CDB5: 29 FF 00    >1038          AND   #$00FF     ;8 BIT STACK SO STRIP HI BYTE
E0CDB8: 18          >1039 :NATIV   CLC              
                    >1040 
E0CDB9: 69 0A 00    >1041          ADC   #STACKBUF-5 ;STACK BUFFER OFFSET
E0CDBC: C9 0F 00    >1042          CMP   #STACKBUF  ;IS POINTER WITHIN LIMITS
E0CDBF:             >1043          MEMORY8          
E0CDBF: E2 20       >1043          SEP   #$20       
                    >1043          <<<              
E0CDC1: B0 1C =CDDF >1044          BGE   :ENDSTKR   ;IF OUTSIDE LIMITS
E0CDC3: A8          >1045          TAY              
                    >1046 
E0CDC4: 2C 1B C9    >1047          BIT   EMULATE    
E0CDC7: 10 02 =CDCB >1048          BPL   :MODEOK    ;STAY IN NATIVE MODE
E0CDC9: 38          >1049          SEC              
E0CDCA: FB          >1050          XCE              ;SET EMULATION MODE
E0CDCB: 9A          >1051 :MODEOK  TXS              ;PUT BACK TO USER'S STACK
                    >1052 
E0CDCC: B9 45 C9    >1053 :WHILE   LDA   STKBUFM,Y  ;GET BYTE FOR MAIN RAM STACK
E0CDCF: 2C 16 C0    >1054          BIT   ALTZP      ;TEST ALTZP FLAG
E0CDD2: 10 03 =CDD7 >1055          BPL   :MAIN      ;STACK IS IN MAIN RAM
E0CDD4: B9 54 C9    >1056          LDA   STKBUFA,Y  ;GET BYTE FOR AUX RAM STACK
E0CDD7: 48          >1057 :MAIN    PHA              
E0CDD8: 88          >1058          DEY              
E0CDD9: 10 F1 =CDCC >1059          BPL   :WHILE     
                    >1060 
E0CDDB: 18          >1061          CLC              
E0CDDC: FB          >1062          XCE              ;PUT BACK IN NATIVE MODE
E0CDDD:             >1063          INDEX16          
E0CDDD: C2 10       >1063          REP   #$10       
                    >1063          <<<              
                    >1064 :ENDSTKR                  
                    >1065 
                    >1066 *-------------------------------------------------
                    >1067 * Save an area of user's stack ram to ddt ram and switch stack pointer
                    >1068 * to this work area.
                    >1069 * Saves from main or aux stack ram according to setting of ALTZP
                    >1070          MX    %10        
                    >1071 
                    >1072 SAVEWSTK                  
E0CDDF: A2 28 00    >1073          LDX   #WSTKLGTH  ;LENGTH OF WORK STACK
                    >1074 
E0CDE2: BF 28 01 00 >1075 :WHILE2  LDAL  WORKSTAK-WSTKLGTH,X 
E0CDE6: 9D 1D C9    >1076          STA   WSTKBUFF,X ;SAVE WORK STACK TO DDT RAM
E0CDE9: CA          >1077          DEX              
E0CDEA: D0 F6 =CDE2 >1078          BNE   :WHILE2    
                    >1079 
E0CDEC: A2 50 01    >1080          LDX   #WORKSTAK  
E0CDEF: 9A          >1081          TXS              ;SET STACK TO WORK AREA
E0CDF0: 0B          >1082          PHD              ;PUSH 16 BIT DIRECT REG
E0CDF1: FA          >1083          PLX              ;PULL 16 BITS
E0CDF2: 8E 19 C8    >1084          STX   DREG       ;SAVE DIRECT REG
E0CDF5: A2 00 00    >1085          LDX   #0000      
E0CDF8: DA          >1086          PHX              
E0CDF9: 2B          >1087          PLD              ;SET DIRECT REG TO INSURE IT'S IN RAM
E0CDFA: AE A1 C9    >1088          LDX   TEMP       ;GET RETURN ADDRESS
E0CDFD: DA          >1089          PHX              ;PUT ON STACK
E0CDFE: E2 34       >1090          SEP   #%00110100 ;8 BIT DATA & INDEX, IRQ DISABLE
E0CE00: AD 11 C8    >1091          LDA   ACC        
E0CE03: 8D 2C C8    >1092          STA   ZBYTE1     
E0CE06: 60          >1093          RTS              
                    >1094          MX    %11        
                    >1095 
                    >1096 *----------------------------------
                    >1097 *       INTSTUFF
                    >1098 *
                    >1099 * The DDT only traps the BRK and NMI interrupts:
                    >1100 * Interrupt house keeping stuff
                    >1101 *  Get interrupt info off user's stack.
                    >1102 *  Set working stack space.
                    >1103 *  Save registers.
                    >1104 *  Set native mode.
                    >1105 *  Enters with MEMORY8.
                    >1106 *  Trap only our NMI's and all BRKs but nothing else.
                    >1107 *
                    >1108 * Note! This routine must operate in the user's mode (native,emualtion) when
                    >1109 * dealing with the stack.
                    >1110 
                    >1111 INTSTUFF                  
E0CE07: 78          >1112          SEI              ;disable interrupts
E0CE08: D8          >1113          CLD              
E0CE09: 8F 17 C9 E0 >1114          STAL  CXSTATUS   ;save CXROM status
E0CE0D: 8B          >1115          PHB              ;save data bank
E0CE0E: 18          >1116          CLC              
E0CE0F: FB          >1117          XCE              ;set native mode so native pulls work right
E0CE10: A9 E0       >1118          LDA   #$E0       
E0CE12: 48          >1119          PHA              
E0CE13: AB          >1120          PLB              ;set data bank
E0CE14: FB          >1121          XCE              ;restore user's mode
E0CE15: EB          >1122          XBA              
E0CE16: 8D 12 C8    >1123          STA   ACC+1      ;save hi byte
                    >1124 
                    >1125 * This must be done before the capacitor on the button input recharges
                    >1126 * to 0.6v, approximately 0.1mS.
                    >1127 * Needed here incase of fast NMI
E0CE19: AD 0C C8    >1128          LDA   VIAPCR     ;ENTER HERE TO PUT /INIT LOW
E0CE1C: 09 EE       >1129          ORA   #%11101110 ;REMOVE INVISIBILITY (CA2 HI) &
                    >1130 * don't replace apple's vectors (CB2 HI)
                    >1131 ***** ALLOW switching segments in DDT ROM !!! *****  (CB2 HI)
E0CE1E: 8D 0C C8    >1132          STA   VIAPCR     
                    >1133 
                    >1134 * Stop T2 count incase this is ET command
E0CE21: AD 0B C8    >1135          LDA   VIAACR     
E0CE24: 09 20       >1136          ORA   #%00100000 
E0CE26: 8D 0B C8    >1137          STA   VIAACR     
                    >1138 *----------------------------------------------------------------------
                    >1139 *  !!! TIME DEPENDENT UP TO THIS POINT because of ET command
                    >1140 *----------------------------------------------------------------------
                    >1141 
                    >1142 * get interrupt stuff off stack
E0CE29: 68          >1143          PLA              
E0CE2A: 8D 1B C8    >1144          STA   DBR        
E0CE2D: 68          >1145          PLA              
E0CE2E: 8D 11 C8    >1146          STA   ACC        ;save low byte
E0CE31: 68          >1147          PLA              
E0CE32: 8D A3 C9    >1148          STA   TEMP+2     ;save post interrupt status
                    >1149 
E0CE35: 68          >1150          PLA              
E0CE36: 8D A1 C9    >1151          STA   TEMP       
E0CE39: 68          >1152          PLA              
E0CE3A: 8D A2 C9    >1153          STA   TEMP+1     ;address of $3FB or $E1/0070 JSR return
                    >1154 
E0CE3D: F4 60 CC    >1155          PEA   INTANLYZ-1 ;address of command, Interupt Anlyze
E0CE40: F4 00 05    >1156          PEA   S_INTANL   ;segment # of command
E0CE43: 4C B7 CF    >1157          JMP   JUMPSEG0   ;goto command in other segment
                    >1158 
                    >1159 *-----------------------------------------------------
                    >1160 * Restore the work stack ram area from ddt ram buffer.
                    >1161 * enters with Stack set to DDTSTACK & Index16
                    >1162 * Restores to main or aux ram according to setting of ALTZP
                    >1163          MX    %10        
                    >1164 
                    >1165 WSTKRES                   
E0CE46: A2 28 00    >1166          LDX   #WSTKLGTH  ;LENGTH OF WORK STACK
                    >1167 
E0CE49: BD 1D C9    >1168 :WHILE   LDA   WSTKBUFF,X ;GET WORK STACK DATA FROM DDT RAM
E0CE4C: 9F 28 01 00 >1169          STAL  WORKSTAK-WSTKLGTH,X ;PUT IN STACK RAM
E0CE50: CA          >1170          DEX              
E0CE51: D0 F6 =CE49 >1171          BNE   :WHILE     
                    >1172 
E0CE53: 60          >1173          RTS              
                    >1174          MX    %11        
                    >1175 
                    >1176 *----------------------------------------
                    >1177 * STACKRES
                    >1178 * Restore the area of the user's stack that was used by the DDT for WORK STACK
                    >1179 * Save User's stack
                    >1180 * Enters with stack in DDTSTACK
                    >1181 * Returns with MX16
                    >1182          MX    %10        ;ENTERS WITH INDEX16
E0CE54: 20 46 CE    >1183 STACKRES JSR   WSTKRES    ;RESTORE WORK STACK
                    >1184 
                    >1185 *------------------------------------------
                    >1186 * Save the area of the user's stack that will be changed by the DDT.
                    >1187 
                    >1188 STACKSAV                  
E0CE57:             >1189          INDEX16          
E0CE57: C2 10       >1189          REP   #$10       
                    >1189          <<<              
E0CE59: AD 3F C8    >1190          LDA   USEROPCD   ;GET USER'S OPCODE
E0CE5C: C9 9A       >1191          CMP   #$9A       ;IS IT TXS ?
E0CE5E: D0 05 =CE65 >1192          BNE   :NOTXS     ;IF NO
E0CE60: AE 13 C8    >1193          LDX   XREG       ;USE X FOR STACK POINTER
E0CE63: 80 0C =CE71 >1194          BRA   :STACKS    
E0CE65: C9 1B       >1195 :NOTXS   CMP   #$1B       ;IS IT TCS ?
E0CE67: D0 05 =CE6E >1196          BNE   :NOTCS     ;IF NO
E0CE69: AE 11 C8    >1197          LDX   ACC        ;USE ACC FOR STACK POINTER
E0CE6C: 80 03 =CE71 >1198          BRA   :STACKS    
                    >1199 
                    >1200 * Save the stack RAM that may be changed by the DDT interrupt.
                    >1201 
E0CE6E: AE 17 C8    >1202 :NOTCS   LDX   STACK      ;GET USER'S STACK POINTER
E0CE71: 8E 5E C8    >1203 :STACKS  STX   OLDSTACK   ;SAVE POINTER TO BE USED DURING RESTORE
E0CE74: E8          >1204          INX              
E0CE75: E8          >1205          INX              
E0CE76: E8          >1206          INX              ;START SAVE 4 BYTES ABOVE STACK POINTER
E0CE77: E8          >1207          INX              
E0CE78: A0 0E 00    >1208          LDY   #STACKBUF-1 ;SAVE STACKBUF BYTES
                    >1209 
E0CE7B: AD 16 C0    >1210          LDA   ALTZP      
E0CE7E: 8D 7C C8    >1211          STA   ALTZPBF    ;SAVE ALTZP
E0CE81: 8D 08 C0    >1212          STA   MAINZP     ;SET TO MAIN RAM STACK
                    >1213 
E0CE84: C9 FB       >1214          CMP   #$FB       ;IS IT XCE ?
E0CE86: D0 09 =CE91 >1215          BNE   :NOXCE     ;IF NO
E0CE88: AD 1E C8    >1216          LDA   STATUS     
E0CE8B: 29 01       >1217          AND   #$01       ;WHAT WILL NEW MODE BE?
E0CE8D: D0 1B =CEAA >1218          BNE   :EMUL      ;IF 8 BIT
E0CE8F: 80 05 =CE96 >1219          BRA   :SAVE16    ;IF 16 BIT
                    >1220 
E0CE91: 2C 1B C9    >1221 :NOXCE   BIT   EMULATE    ;WHAT IS CURRENT MODE?
E0CE94: 30 14 =CEAA >1222          BMI   :EMUL      ;CF 8 BIT
                    >1223 
                    >1224 * SAVE 16 BIT STACK
                    >1225 * WHILE Y > 0 DO
E0CE96: BF 00 00 00 >1226 :SAVE16  LDAL  $000000,X  ;GET DATA FROM MAIN STACK RAM
E0CE9A: 99 45 C9    >1227          STA   STKBUFM,Y  ;SAVE IN DDT RAM
E0CE9D: BF 00 00 01 >1228          LDAL  $010000,X  ;GET DATA FROM AUX STACK RAM
E0CEA1: 99 54 C9    >1229          STA   STKBUFA,Y  ;SAVE IN DDT RAM
E0CEA4: CA          >1230          DEX              
E0CEA5: 88          >1231          DEY              
E0CEA6: 10 EE =CE96 >1232          BPL   :SAVE16    
                    >1233 * ENDW  
E0CEA8: 80 14 =CEBE >1234          BRA   :ENDSTKS   
                    >1235 
E0CEAA:             >1236 :EMUL    INDEX8           ;8 BIT STACK
E0CEAA: E2 10       >1236          SEP   #$10       
                    >1236          <<<              
                    >1237 
                    >1238 * SAVE 8 BIT STACK
                    >1239 * WHILE Y > 0 DO
E0CEAC: BF 00 01 00 >1240 :WHILE   LDAL  $000100,X  ;GET DATA FROM MAIN STACK RAM
E0CEB0: 99 45 C9    >1241          STA   STKBUFM,Y  ;SAVE IN DDT RAM
E0CEB3: BF 00 01 01 >1242          LDAL  $010100,X  ;GET DATA FROM AUX STACK RAM
E0CEB7: 99 54 C9    >1243          STA   STKBUFA,Y  ;SAVE IN DDT RAM
E0CEBA: CA          >1244          DEX              
E0CEBB: 88          >1245          DEY              
E0CEBC: 10 EE =CEAC >1246          BPL   :WHILE     
                    >1247 * ENDW
                    >1248 
                    >1249 :ENDSTKS                  
E0CEBE: 2C 7C C8    >1250          BIT   ALTZPBF    ;WAS STACK IN MAIN RAM ?
E0CEC1: 10 03 =CEC6 >1251          BPL   :MAIN      ;IF YES
E0CEC3: 8D 09 C0    >1252          STA   AUXZP      ;IF NO, PUT STACK IN AUX RAM
E0CEC6:             >1253 :MAIN    MX16             
E0CEC6: C2 30       >1253          REP   #$30       
                    >1253          <<<              
E0CEC8: 60          >1254          RTS              
                    >1255          MX    %11        
                    >1256 
                    >1257 *********************************
                    >1258 *  COMDJS - JSR
                    >1259 *********************************
                    >1260 
                    >1261 * Execute the subroutine at the address following
                    >1262 * the "JS" command and return to DDT command prompt.
                    >1263 
            =E0CEC9 >1264 COMDJS   EQU   *          
E0CEC9: F0 06 =CED1 >1265          BEQ   TOERR0     ;IF NO ADDRESS FOLLOWS
E0CECB: 20 C6 CF    >1266          JSR   TRANSFR0   ;check for valid hex, put in LETTER3,2,1
E0CECE: 09          >1267          DFB   CHKREADC   ; code
E0CECF: 90 03 =CED4 >1268          BCC   JSCONT     ;if OK
E0CED1: 4C 73 CA    >1269 TOERR0   JMP   BADPAR0    ;IF bad
                    >1270 
                    >1271 * Set up RTS so user's routine returns to CMDDORTS in cards I/O slot
                    >1272 
E0CED4: AD 28 C8    >1273 JSCONT   LDA   SLOTCN      ;SLOT # $CN
E0CED7: 48          >1274          PHA              ;HI BYTE OF RETURN ADDRESS
E0CED8: A9 5A       >1275          LDA   #CMDDORTS-1 ;LOW BYTE OF RETURN ADDRESS
E0CEDA: 48          >1276          PHA              
E0CEDB: AD 30 C8    >1277          LDA   LETTER1    ;LOW ADDRESS BYTE OF USER SUB
E0CEDE: 8D 4A C8    >1278          STA   SUBTRACE   ;SUBTRACE IS OK TO USE
E0CEE1: AD 31 C8    >1279          LDA   LETTER2    ;HI ADDRESS BYTE
E0CEE4: 8D 4B C8    >1280          STA   SUBTRACE+1 
E0CEE7: 20 C6 CF    >1281          JSR   TRANSFR1   ;RESTORE THE Z PAGE & TEXT RAM
E0CEEA: 1E          >1282          DFB   RESTTEXTC  ;CODE
E0CEEB: 6C 4A C8    >1283          JMP   (SUBTRACE) 
                    >1284 
                    >1285 *----------------------------*
                    >1286 *  COMDRT - REAL TIME
                    >1287 *----------------------------*
                    >1288 
                    >1289 * Run the users program in real time to the matching RTS.
                    >1290 * The current instruction is traced first
                    >1291 
E0CEEE: A9 C0       >1292 COMDRT   LDA   #$C0       
E0CEF0: 8D 9C C8    >1293          STA   COMRTFLG   ;INDICATE realtime active (7=1), & COMMAND RT (6=1)
E0CEF3: AD 1E C8    >1294          lda   STATUS     
E0CEF6: 8D 9D C8    >1295          sta   RTstatus   ; save user's status so we can restore user's I flag
E0CEF9: 09 04       >1296          ora   #$04       ; disable interrupts for JSL
E0CEFB: 8D 1E C8    >1297          sta   STATUS     
                    >1298 
                    >1299 * Trace any kind of instruction with STEP1
E0CEFE: 4C 96 CA    >1300          JMP   STEP1      
                    >1301 
                    >1302 ******************************
                    >1303 * COMMAND ON
                    >1304 ******************************
                    >1305 
            =0000   >1306 S_COMDON =     ]segnum    ;segment number of this routine
E0CF01: 2C 25 C8    >1307 COMDON   BIT   OFFFLAG    ;IS DISPLAY OFF ?
E0CF04: 10 09 =CF0F >1308          BPL   ONIFON     ;IF NO
E0CF06: A9 00       >1309          LDA   #0         
E0CF08: 8D 25 C8    >1310          STA   OFFFLAG    ;ENABLE DISP TO SCREEN
E0CF0B: 20 C6 CF    >1311          JSR   TRANSFR0   ;SAVE SCREEN DISPLAY IF INV ON
E0CF0E: 36          >1312          DFB   SAVEDISPC  ;code
E0CF0F: 20 C6 CF    >1313 ONIFON   JSR   TRANSFR0   ;DISPLAY ALL WINDOWS
E0CF12: 8E          >1314          DFB   DISPONC    ;code
E0CF13: 80 0E =CF23 >1315          BRA   GETCOM0    
                    >1316 
                    >1317 ******************************
                    >1318 *  COMDOFF - Turn DDT display off
                    >1319 ******************************
                    >1320 
            =0000   >1321 S_COMDOFF =    ]segnum    ;segment number of this routine
E0CF15: 2C 25 C8    >1322 COMDOFF  BIT   OFFFLAG    ;DISPLAY ALREADY OFF ?
E0CF18: 30 09 =CF23 >1323          BMI   GETCOM0    ;IF YES
E0CF1A: 20 C6 CF    >1324          JSR   TRANSFR0   ;RESTORE DISPLAY SWITCHES
E0CF1D: 1E          >1325          DFB   RESTTEXTC  ;code
E0CF1E: A9 80       >1326          LDA   #$80       
E0CF20: 8D 25 C8    >1327          STA   OFFFLAG    ;DON'T DISPLAY TO SCREEN
                    >1328 
                    >1329 *----------------------------------------
                    >1330 *   GETCOM0 - do <CR> & wait for user command
                    >1331 *----------------------------------------
                    >1332 
E0CF23: F4 FF C9    >1333 GETCOM0  PEA   GETCOMCR-1 ;address of command
E0CF26: F4 00 05    >1334          PEA   S_GETCOM   ;segment # of command
E0CF29: 4C B7 CF    >1335          JMP   JUMPSEG0   ;goto command in other segment
                    >1336 
                    >1337 *------------------------------------------------
                    >1338 ***** GLOBAL SUBROUTINES IN THIS SEGMENT *****
                    >1339 ***** MAXIMUM OF 32 *****
                    >1340 ***** CODE BYTES ARE EQUATED AS FOLLOWS
                    >1341 *
                    >1342 * BITS 0-2 = SEGMENT NUMBER $0 THRU $7 OF SUBROUTINE
                    >1343 * BITS 3-7 = NUMBER OF SUBROUTINE IN SUBTABL
                    >1344 
                    >1345 SUBTABL0                  
                    >1346 
            =0100   >1347 LDAINDYC EQU   *-SUBTABL0*4+0+$100 
E0CF2C: 50 CC       >1348          DA    LDAINDY-1  
                    >1349 
            =0108   >1350 STAINDYC EQU   *-SUBTABL0*4+0+$100 
E0CF2E: 54 CC       >1351          DA    STAINDY-1  
                    >1352 
            =0110   >1353 STEP1C   EQU   *-SUBTABL0*4+0+$100 
E0CF30: 95 CA       >1354          DA    STEP1-1    
                    >1355 
            =0118   >1356 EXECUTEC EQU   *-SUBTABL0*4+0+$100 
E0CF32: 9E CC       >1357          DA    EXECUTE-1  
                    >1358 
            =0120   >1359 WSTKRESC EQU   *-SUBTABL0*4+0+$100 
E0CF34: 45 CE       >1360          DA    WSTKRES-1  
                    >1361 
            =0128   >1362 AX2S1_AC EQU   *-SUBTABL0*4+0+$100 
E0CF36: 24 CD       >1363          DA    AX2S1_A-1  
                    >1364 
                    >1365 ************* SEGMENT CROSSOVER AREA *************
                    >1366 
            =0059   >1368 S0END    =     $E0CF91-*  
                    >1369          do    nolist     
                    >1370          LST   OFF        
                    >1371          fin              
                    >1372          ERR   *-1/$E0CF91 
E0CF38: FF FF FF FF >1373          DS    $E0CF91-*,$FF 
                    >1374 
                    >1375 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1376 * Returns with MX = 11, saves registers
                    >1377 
                    >1378 SAVEAXP0                  
E0CF91: 08          >1379          PHP              ;SAVE STATUS
E0CF92:             >1380          MX16             
E0CF92: C2 30       >1380          REP   #$30       
                    >1380          <<<              
E0CF94: 8E 63 C8    >1381          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1382          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1383          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1384          MX8              
E0CF9D: E2 30       >1384          SEP   #$30       
                    >1384          <<<              
E0CF9F: 68          >1385          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1386          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1387          RTS              
                    >1388 
                    >1389 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1390 * restores registers
                    >1391 
                    >1392 RESTAXP0                  
E0CFA4:             >1393          MEMORY8          
E0CFA4: E2 20       >1393          SEP   #$20       
                    >1393          <<<              
E0CFA6: AD 67 C8    >1394          LDA   PSAVESEG   
E0CFA9: 48          >1395          PHA              
E0CFAA:             >1396          MX16             
E0CFAA: C2 30       >1396          REP   #$30       
                    >1396          <<<              
E0CFAC: AE 63 C8    >1397          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1398          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1399          LDA   ASAVESEG   
E0CFB5: 28          >1400          PLP              
                    >1401 
                    >1402 *** THIS RTS IS USED BY THE FINDSLOT ROUTINE ***
E0CFB6: 60          >1403 PUTSLOT  RTS              
                    >1404          MX    %11        
                    >1405 
                    >1406 *----------------------------------------
                    >1407 * Do a direct transfer to other segments
                    >1408 
                    >1409 JUMPSEG0                  
E0CFB7: 20 91 CF    >1410          JSR   SAVEAXP0   
E0CFBA: AC 29 C8    >1411          LDY   SLOTN0     
E0CFBD: 68          >1412          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1413          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1414          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1415          JSR   RESTAXP0   ;restore after xfer from other seg
E0CFC5: 60          >1416          RTS              ;pull destination address from stack
                    >1417 
                    >1418 * TRANSFER TO OTHER SEGMENTS
                    >1419 * Upper byte of X index is zeroed
                    >1420 
                    >1421 TRANSFR0                  
E0CFC6: 20 91 CF    >1422          JSR   SAVEAXP0   
E0CFC9:             >1423          MEMORY16         
E0CFC9: C2 20       >1423          REP   #$20       
                    >1423          <<<              
E0CFCB: 68          >1424          PLA              ;get return address from stack
E0CFCC: 1A          >1425          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1426          PHA              
E0CFCE:             >1427          MEMORY8          
E0CFCE: E2 20       >1427          SEP   #$20       
                    >1427          <<<              
E0CFD0: A9 00       >1428          LDA   #0         ;CURRENT SEG #
E0CFD2: 48          >1429          PHA              
E0CFD3: A0 00       >1430          LDY   #0         
E0CFD5: B3 02       >1431          LDA   (2,S),Y    ;GET CODE BYTE
E0CFD7: 48          >1432          PHA              ;SAVE CODE
E0CFD8: 29 07       >1433          AND   #$07       ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1434          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1435          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1436 * NEW SEGMENT
E0CFE0: 68          >1437          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1438          PEA   RETURN0    ;where to return to
E0CFE4: 29 F8       >1439          AND   #$F8       ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1440          LSR              
E0CFE7: 4A          >1441          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1442 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1443          TAY              
E0CFE9:             >1444          MEMORY16         
E0CFE9: C2 20       >1444          REP   #$20       
                    >1444          <<<              
E0CFEB: B9 2C CF    >1445          LDA   SUBTABL0,Y 
E0CFEE: 48          >1446          PHA              
E0CFEF: 80 B3 =CFA4 >1447          BRA   RESTAXP0   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1448          MX    %11        
                    >1449 
                    >1450 * RETURN HERE FROM SUBROUTINE
                    >1451 
            =E0CFF0 >1452 RETURN0  EQU   *-1        
E0CFF1: 20 91 CF    >1453          JSR   SAVEAXP0   
E0CFF4: 68          >1454          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1455          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1456          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1457          BRA   RESTAXP0   
                    >1458 
E0CFFD: FF FF FF    >1459          DS    \,$FF      ;PUT OBJECT AT NEXT PAGE
                     41            PUT   SEG1       
                    >2    **********************************
                    >3    *           SEG1
                    >4    **********************************
                    >5    
                    >6    ]segnum  =     #$0100      ;current segment number
                    >7    
                    >8             ORG   $E0C800     ;RUNS FROM $C800
                    >9    
                    >10   *************** MESSAGES *************
                    >11   
                    >12   MSGINVBP                  
E0C800: 8D          >13            DFB   CR         
E0C801: C9 CE D6 C1 >14            ASC   "INVALID ADDRESS" 
E0C810: 87 8D 84    >15            DFB   BEL,CR,EOT 
                    >16   
                    >17   * MESSAGE "BREAK"
                    >18   
                    >19   MSGBRKPT                  
E0C813: 8D          >20            DFB   CR         
E0C814: C2 D2 C5 C1 >21            ASC   "BREAKS"   
E0C81A: 8D 84       >22            DFB   CR,EOT     
                    >23   
                    >24   MSGHARDB                  
E0C81C: 8D          >25            DFB   CR         
E0C81D: C8 C1 D2 C4 >26            ASC   "HARDWARE BREAK" 
E0C82B: 8D 84       >27            DFB   CR,EOT     
                    >28   
                    >29   MSGAVAIL                  
E0C82D: CD A0 EF F2 >30            ASC   "M or ?"   
E0C833: 05          >31            DFB   05         
E0C834: CD C5 CE D5 >32            ASC   "MENU"     
E0C838: 18          >33            DFB   24         
E0C839: CD C4 A0 DB >34            ASC   "MD [A]"   
E0C83F: 05          >35            DFB   05         
E0C840: CD E5 ED A0 >36            ASC   "Mem Dump" 
E0C848: 8D          >37            DFB   CR         
                    >38   
E0C849: CD CF       >39            ASC   "MO"       
E0C84B: 09          >40            DFB   09         
E0C84C: CD EF E4 E5 >41            ASC   "Mode"     
E0C850: 18          >42            DFB   24         
E0C851: CD D7       >43            ASC   "MW"       
E0C853: 09          >44            DFB   09         
E0C854: CD E5 ED A0 >45            ASC   "Mem Wind" 
E0C85C: 8D          >46            DFB   CR         
                    >47   
E0C85D: E5 F3 E3    >48            ASC   "esc"      
E0C860: 08          >49            DFB   8          
E0C861: BA A0 EC E5 >50            ASC   ": level"  
E0C868: 15          >51            DFB   21         
E0C869: CD CD A0 DB >52            ASC   "MM [A]"   
E0C86F: 05          >53            DFB   05         
E0C870: CD E5 ED A0 >54            ASC   "Mem Mod"  
E0C877: 8D          >55            DFB   CR         
                    >56   
E0C878: D3 D3 A0 C1 >57            ASC   "SS A"     
E0C87C: 07          >58            DFB   07         
E0C87D: D3 E5 F4 A0 >59            ASC   "Set Switch" 
E0C887: 12          >60            DFB   18         
E0C888: CD C1 A0 DB >61            ASC   "MA [A]"   
E0C88E: 05          >62            DFB   05         
E0C88F: CD E9 EE E9 >63            ASC   "Mini Assem" 
E0C899: 8D          >64            DFB   CR         
                    >65   
E0C89A: D3 C4 A0 D4 >66            ASC   "SD T"     
E0C89E: 07          >67            DFB   07         
E0C89F: D3 E5 F4 A0 >68            ASC   "Set Disp" 
E0C8A7: 14          >69            DFB   20         
E0C8A8: D0 D7       >70            ASC   "PW"       
E0C8AA: 09          >71            DFB   09         
E0C8AB: D0 F2 EF F4 >72            ASC   "Prot Wind" 
E0C8B4: 8D          >73            DFB   CR         
                    >74   
E0C8B5: CF CE       >75            ASC   "ON"       
E0C8B7: 25          >76            DFB   37         
E0C8B8: D2 D4       >77            ASC   "RT"       
E0C8BA: 09          >78            DFB   09         
E0C8BB: D2 E5 E1 EC >79            ASC   "Real Time" 
E0C8C4: 8D          >80            DFB   CR         
                    >81   
E0C8C5: CF C6 E6    >82            ASC   "OFf"      
E0C8C8: 24          >83            DFB   36         
E0C8C9: D3 D4 A0 DB >84            ASC   "ST [n]"   
E0C8CF: 05          >85            DFB   05         
E0C8D0: D3 F4 E5 F0 >86            ASC   "Step"     
E0C8D4: 8D          >87            DFB   CR         
                    >88   
E0C8D5: 84          >89            DFB   EOT        
                    >90   
                    >91   MSGAVAL2                  
                    >92   
E0C8D6: CB C5 F9    >93            ASC   "KEy"      
E0C8D9: 08          >94            DFB   08         
E0C8DA: F3 E5 F4    >95            ASC   "set"      
E0C8DD: 19          >96            DFB   25         
E0C8DE: D4 D2 A0 DB >97            ASC   "TR [n]"   
E0C8E4: 05          >98            DFB   05         
E0C8E5: D4 F2 E1 E3 >99            ASC   "Trace"    
E0C8EA: 8D          >100           DFB   CR         
                    >101  
E0C8EB: D3 C2 A0 DB >102           ASC   "SB [T A.n]" 
E0C8F5: 01          >103           DFB   01         
E0C8F6: D3 E5 F4 A0 >104           ASC   "Set BRK"  
E0C8FD: 15          >105           DFB   21         
E0C8FE: D4 D3 A0 C1 >106           ASC   "TS A"     
E0C902: 07          >107           DFB   07         
E0C903: D4 F2 E1 E3 >108           ASC   "Trace w/Sub" 
E0C90E: 8D          >109           DFB   CR         
                    >110  
E0C90F: D2 C2 A0 C1 >111           ASC   "RB A"     
E0C913: 07          >112           DFB   07         
E0C914: D2 E5 ED EF >113           ASC   "Remove BRK" 
E0C91E: 12          >114           DFB   18         
E0C91F: C5 D8 A0 DB >115           ASC   "EX [n]"   
E0C925: 05          >116           DFB   05         
E0C926: C5 F8 E5 E3 >117           ASC   "Execute"  
E0C92D: 8D          >118           DFB   CR         
                    >119  
E0C92E: C8 C2 A0 DB >120           ASC   "HB [A]"   
E0C934: 05          >121           DFB   05         
E0C935: C8 E1 F2 E4 >122           ASC   "Hard Brk" 
E0C93D: 14          >123           DFB   20         
E0C93E: E4 EF F7 EE >124           ASC   "down"     
E0C942: 07          >125           DFB   07         
E0C943: D3 CB C9 D0 >126           ASC   "SKIP"     
E0C947: 8D          >127           DFB   CR         
                    >128  
E0C948: D2 C8       >129           ASC   "RH"       
E0C94A: 09          >130           DFB   09         
E0C94B: D2 E5 ED EF >131           ASC   "Remove HB" 
E0C954: 13          >132           DFB   19         
E0C955: C5 D2       >133           ASC   "ER"       
E0C957: 09          >134           DFB   09         
E0C958: C5 D8 A0 F4 >135           ASC   "EX to RTS" 
E0C961: 8D          >136           DFB   CR         
                    >137  
E0C962: D2 C1       >138           ASC   "RA"       
E0C964: 09          >139           DFB   09         
E0C965: D2 E5 ED EF >140           ASC   "Remove All" 
E0C96F: 12          >141           DFB   18         
E0C970: C5 D4 A0 C1 >142           ASC   "ET A.A"   
E0C976: 05          >143           DFB   05         
E0C977: C5 D8 A0 D4 >144           ASC   "EX Time"  
E0C97E: 8D          >145           DFB   CR         
                    >146  
E0C97F: CC E9 A0 DB >147           ASC   "Li [A]"   
E0C985: 05          >148           DFB   05         
E0C986: CC E9 F3 F4 >149           ASC   "List"     
E0C98A: 18          >150           DFB   24         
E0C98B: C7 CF A0 DB >151           ASC   "GO [A]"   
E0C991: 05          >152           DFB   05         
E0C992: D2 D5 CE    >153           ASC   "RUN"      
E0C995: 8D          >154           DFB   CR         
                    >155  
E0C996: C4 D2       >156           ASC   "DR"       
E0C998: 09          >157           DFB   09         
E0C999: C4 E9 F3 F0 >158           ASC   "Disp Reg's" 
E0C9A3: 12          >159           DFB   18         
E0C9A4: CA D3 A0 C1 >160           ASC   "JS A"     
E0C9A8: 07          >161           DFB   07         
E0C9A9: CA D3 D2 A0 >162           ASC   "JSR A"    
E0C9AE: 8D          >163           DFB   CR         
                    >164  
E0C9AF: D2 BD EE    >165           ASC   "R=n"      
E0C9B2: 08          >166           DFB   08         
E0C9B3: D2 C5 C7 BD >167           ASC   "REG=n"    
E0C9B8: 17          >168           DFB   23         
E0C9B9: AA AA A0 DB >169           ASC   "** [I,C]" 
E0C9C1: 03          >170           DFB   03         
E0C9C2: CD EF EE E9 >171           ASC   "Monitor"  
E0C9C9: 8D          >172           DFB   CR         
                    >173  
E0C9CA: D1 D5 E9 F4 >174           ASC   "QUit"     
E0C9CE: 8D          >175           DFB   CR         
E0C9CF: 84          >176           DFB   EOT        
                    >177  
E0C9D0: 8D          >178  MSGREAL  DFB   CR         
E0C9D1: D2 C5 C1 CC >179           ASC   "REAL BRKS IN" 
E0C9DD: 87          >180           DFB   BEL        
E0C9DE: 84          >181           DFB   EOT        
                    >182  
                    >183  *-------------------------------------------------
                    >184  * Conditional register offset table
                    >185  * Reg, offset
E0C9DF: C1 00       >186  CregOFF  db    "A",0      
E0C9E1: D8 02       >187           db    "X",2      
E0C9E3: D9 04       >188           db    "Y",4      
E0C9E5: D3 06       >189           db    "S",6      
E0C9E7: C4 08       >190           db    "D",8      
E0C9E9: C2 0A       >191           db    "B",$A     
E0C9EB: CD 0B       >192           db    "M",$B     
E0C9ED: D1 0C       >193           db    "Q",$C     
E0C9EF: D0 0D       >194           db    "P",$D     
                    >195  
                    >196  * Conditional symbol offset table
                    >197  * Symbol, offset to proper branch routine
E0C9F1: BD 00       >198  CsymOFF  db    "=",condEQ-condBRKS 
E0C9F3: BC 04       >199           db    "<",condLT-condBRKS 
E0C9F5: DD 08       >200           db    "]",condGE-condBRKS 
E0C9F7: A3 0C       >201           db    "#",condNE-condBRKS 
E0C9F9: BE 10       >202           db    ">",condGT-condBRKS 
E0C9FB: DB 16       >203           db    "[",condLE-condBRKS 
                    >204  
                    >205  
                    >206  *********************************************
                    >207  *  MAKE SURE THIS POINT IS $CA00 OR HIGHER  *
                    >208  *********************************************
                    >209  
                    >210           ERR   *-1/$E0CA00 
E0C9FD: FF FF FF    >211           DS    $E0CA00-*,$FF 
                    >212  
                    >213  * COME HERE FROM LOWER 2K
                    >214  * MAKE SURE THAT THE INSTRUCTIONS DO NOT BEGIN UNTIL $CA00.
                    >215  
                    >216  ********************************
                    >217  *  COMDSB - SET BREAK
                    >218  ********************************
                    >219  
                    >220  * SB (TYPE) (LOCATION)  .  (# OF TIME TO PASS)
                    >221  * SB   R      01/2003   .   1000
                    >222  *         LETTER 3,2,1  .   LETTER 6,5,4
                    >223  * If no bank is specified then break is put in current MEMPBR
                    >224  
            =E0CA00 >225  COMDSB   EQU   *          
E0CA00: D0 03 =CA05 >226           BNE   :SBcont    
E0CA02: 4C A6 CA    >227           JMP   BKPDIS     ;IF NO DISPLAY BREAKPOINTS
E0CA05: C9 D2       >228  :SBcont  CMP   #"R"       ;if Real
E0CA07: F0 0C =CA15 >229           BEQ   :TYPEOK    
E0CA09: C9 C9       >230           CMP   #"I"       ;if Implied
E0CA0B: F0 08 =CA15 >231           BEQ   :TYPEOK    
E0CA0D: C9 C3       >232           CMP   #"C"       ; if Conditional
E0CA0F: F0 04 =CA15 >233           BEQ   :TYPEOK    
E0CA11: A9 D2       >234           LDA   #"R"       ;DEFAULT TO REAL
E0CA13: 88          >235           DEY              ;PUT POINTERS BACK TO
E0CA14: E8          >236           INX              ;.. LAST CHAR
E0CA15: 8D 38 C8    >237  :TYPEOK  STA   SBTYPE     ;SAVE TYPE
E0CA18: 20 14 CD    >238           JSR   CHKREADA   ;read address & count for breakpoint
E0CA1B: B0 2A =CA47 >239           BCS   :TOBP1C     ;IF NOT HEX
                    >240  
E0CA1D: 2C 7E C8    >241  :ADDRSOK BIT   ADDRS2F     ;2 NUMBERS INPUT ?
E0CA20: 30 60 =CA82 >242           BMI   :TWO        ;IF YES
E0CA22: AD 38 C8    >243           LDA   SBTYPE     
E0CA25: C9 C3       >244           CMP   #"C"       ;is this Conditional break?
E0CA27: D0 51 =CA7A >245           BNE   :NOTCOND   
                    >246  
                    >247  * Conditional break! Get register, condition & comparison values & setup BRK.
E0CA29: 20 06 CD    >248           JSR   GETCHR     ;get conditional register
E0CA2C: DA          >249           PHX              ; buffer size
E0CA2D: A2 10       >250           LDX   #16        
E0CA2F: CD 00 C8    >251           CMP   $C800      ; disable DDT RAM
E0CA32: DD DF C9    >252  :repeat  CMP   CregOFF,X  ;search table for matching register
E0CA35: D0 0B =CA42 >253           BNE   :nextCrg   
E0CA37: BD E0 C9    >254           LDA   CregOFF+1,X ;get register offset
E0CA3A: CD 00 CF    >255           CMP   $CF00      ; enable DDT RAM
E0CA3D: 8D 37 C8    >256           STA   LETTER8    
E0CA40: 80 0B =CA4D >257           BRA   :CONDsym   
E0CA42: CA          >258  :nextCrg DEX              
E0CA43: CA          >259           DEX              
E0CA44: 10 EC =CA32 >260           BPL   :repeat    
E0CA46: FA          >261  :TOBP1CX PLX              ; restore stack
E0CA47: CD 00 CF    >262  :TOBP1C  CMP   $CF00      ; enable DDT RAM
E0CA4A: 4C 5F CB    >263           JMP   BPERR1     ;Bad Parameters error
                    >264  
E0CA4D: FA          >265  :CONDsym PLX              ; restore buffer size
E0CA4E: 20 06 CD    >266           JSR   GETCHR     ; get conditional symbol
E0CA51: DA          >267           PHX              ; save buffer size
E0CA52: A2 0A       >268           LDX   #10        
E0CA54: CD 00 C8    >269           CMP   $C800      ; disable DDT RAM
E0CA57: DD F1 C9    >270  :repeat2 CMP   CsymOFF,X  ;search table for matching symbol
E0CA5A: D0 0B =CA67 >271           BNE   :nextCsy   
E0CA5C: BD F2 C9    >272           LDA   CsymOFF+1,X ;get symbol offset
E0CA5F: CD 00 CF    >273           CMP   $CF00      ; enable DDT RAM
E0CA62: 8D 36 C8    >274           STA   LETTER7    
E0CA65: 80 06 =CA6D >275           BRA   :CONDcmp   
E0CA67: CA          >276  :nextCsy DEX              
E0CA68: CA          >277           DEX              
E0CA69: 10 EC =CA57 >278           BPL   :repeat2   
E0CA6B: 80 D9 =CA46 >279           BRA   :TOBP1CX   
                    >280  
E0CA6D: FA          >281  :CONDcmp PLX              ; restore buffer size
E0CA6E: A9 FF       >282           LDA   #$FF       
E0CA70: 8D 7E C8    >283           STA   ADDRS2F    ; set for 2 number input
E0CA73: 20 CF CD    >284           JSR   SWAPnext   ; read Conditional compare value
E0CA76: B0 CF =CA47 >285           BCS   :TOBP1C    ; IF NOT valid
E0CA78: 80 08 =CA82 >286           BRA   :TWO       
                    >287  
E0CA7A: 9C 34 C8    >288  :NOTCOND STZ   LETTER5     ;
E0CA7D: A9 01       >289           LDA   #1         
E0CA7F: 8D 33 C8    >290           STA   LETTER4     ;DEFAULT TO 1 ON # OF TIMES TO PASS
E0CA82: AD F8 C8    >291  :TWO     LDA   POINT       ;SEE IF THERE IS ROOM FOR ANOTHER BREAK
E0CA85: C9 32       >292           CMP   #50         ;50 BREAKS
E0CA87: 90 05 =CA8E >293           BLT   NOTFULL     ;IF OK
E0CA89: A9 10       >294           LDA   #BRKFUL     ;ERROR NUMBER
E0CA8B: 4C 61 CB    >295  SBERR    JMP   ERREXIT1   ;NO ROOM
E0CA8E: 20 C6 CF    >296  NOTFULL  JSR   TRANSFR1   ;PUT BRK & UPDATE BRK STACK (Z=0 NOT RAM)
E0CA91: 02          >297           DFB   PUTBREAKC  ;CODE
E0CA92: F0 04 =CA98 >298           BEQ   ISRAM       ;LOCATION IS RAM
E0CA94: 20 C6 CF    >299  NOTRAM   JSR   TRANSFR1   ;DISPLAY MESSAGE
E0CA97: 0C          >300           DFB   DISNOTRMC  ;CODE
E0CA98: 20 C6 CF    >301  ISRAM    JSR   TRANSFR1   ;UPDATE BRK WINDOW
E0CA9B: B7          >302           DFB   DISBRKWC   ;code
E0CA9C: 20 C6 CF    >303           JSR   TRANSFR1   ;UPDATE FLAG WINDOW
E0CA9F: A7          >304           DFB   DISFLGWC   ;code
E0CAA0: 20 C6 CF    >305  SETDRW   JSR   TRANSFR1   ;SET DR WINDOW
E0CAA3: A6          >306           DFB   WINDDRC     ;code
E0CAA4: 80 03 =CAA9 >307           BRA   ENDSTDR    
E0CAA6: 20 03 CE    >308  BKPDIS   JSR   DISBKP      ;DISPLAY BREAKPOINTS
E0CAA9: 4C DF CE    >309  ENDSTDR  JMP   GETCOM1    
                    >310  
                    >311  ********************************
                    >312  *  COMDHB - SET HARDWARE BREAK
                    >313  ********************************
                    >314  
            =E0CAAC >315  COMDHB   EQU   *          
E0CAAC: F0 29 =CAD7 >316           BEQ   SHDIS       ;NOTHING THERE SO DISPLAY BREAKPOINTS
                    >317  
E0CAAE: C9 D8       >318           CMP   #"X"        ;stop in all banks?
E0CAB0: F0 04 =CAB6 >319           BEQ   :HALT_AL   ;If yes
E0CAB2: A9 00       >320           LDA   #0          ;Default to one bank
E0CAB4: 88          >321           DEY              ;Put pointers back to
E0CAB5: E8          >322           INX              ;.. last character
                    >323  :HALT_AL                  
E0CAB6: 8D 9B C8    >324           STA   HALT_ALL   ;set flag, if >= $80 then stop in all banks
                    >325  
E0CAB9: 20 14 CD    >326           JSR   CHKREADA   ;check for hex and read
E0CABC: B0 20 =CADE >327  TOBP1A   BCS   TOBP1B      ;IF ERROR
E0CABE: 8D 01 C8    >328           STA   VIAORA      ;STORE IN LOW BYTE OF COMPARATOR
E0CAC1: AD 31 C8    >329           LDA   LETTER2     ;GET HI BYTE
E0CAC4: 8D 10 C8    >330           STA   VIAORB      ;STORE IN HI BYTE
E0CAC7: AD 32 C8    >331           LDA   LETTER3    
E0CACA: 8D 12 C9    >332           STA   HARDPBR     ;BANK TO STOP IN
E0CACD: A9 90       >333           LDA   #%10010000 
E0CACF: 0D 43 C8    >334           ORA   IERBUFF     ;ENABLE HARDWARE BREAK
E0CAD2: 8D 43 C8    >335           STA   IERBUFF    
E0CAD5: D0 03 =CADA >336           BNE   NODISH     
E0CAD7: 20 CD CE    >337  SHDIS    JSR   DISHB       ;DISPLAY HARDWARE BREAK
E0CADA: 80 BC =CA98 >338  NODISH   BRA   ISRAM       ;UPDATE BRK WINDOW 
                    >339  
                    >340  ********************************
                    >341  *  COMDRB - REMOVE BREAK
                    >342  ********************************
                    >343  
                    >344  * RB 012003
                    >345  
            =E0CADC >346  COMDRB   EQU   *          
E0CADC: D0 03 =CAE1 >347           BNE   RBOK        ;IF ADDRESS FOLLOWS
E0CADE: 4C 5F CB    >348  TOBP1B   JMP   BPERR1      ;BAD PARAMETER ERROR
E0CAE1: 20 12 CD    >349  RBOK     JSR   CHKREAD     ;READ ADDRS INTO LETTER 3,2,1
E0CAE4: B0 F8 =CADE >350           BCS   TOBP1B      ;IF NOT HEX
E0CAE6: 20 C6 CF    >351           JSR   TRANSFR1   ;SEE IF ADDRESS IS ON LIST
E0CAE9: 3A          >352           DFB   VALIDADC   ;code
E0CAEA: 30 06 =CAF2 >353           BMI   INVBREAK   ;INVALID BREAKPOINT
                    >354  
                    >355  * The following subroutine replaces a breakpoint in the program
                    >356  * with the original data. Removes from BREAKS buffer, and
                    >357  * reorganizes the breaks list. Enter with Y pointing at the BRK.
                    >358  
E0CAEC: 20 C6 CF    >359           JSR   TRANSFR1   ;REPLACE BRK WITH ORIG DATA
E0CAEF: 42          >360           DFB   REPLACEC   ;code
E0CAF0: 80 A6 =CA98 >361           BRA   ISRAM       ;UPDATE BRK WINDOW
                    >362  
E0CAF2: 20 D8 CE    >363  INVBREAK JSR   DISINVBP   ;DISPLAY "INVALID BRK ADDRS"
E0CAF5: 80 B2 =CAA9 >364  RBTOM11  BRA   ENDSTDR    ;goes to GETCOM1
                    >365  
                    >366  ********************************
                    >367  *  COMDRH - REMOVE HARDWARE BREAK
                    >368  ********************************
                    >369  
E0CAF7: 20 94 CC    >370  COMDRH   JSR   CLRHARD     ;CLEAR HARDWARE BREAK
E0CAFA: 80 9C =CA98 >371           BRA   ISRAM       ;UPDATE BRK WINDOW
                    >372  
                    >373  ********************************
                    >374  *  COMDRA - REMOVE ALL BREAKS
                    >375  ********************************
                    >376  
E0CAFC: 20 87 CC    >377  COMDRA   JSR   CLEARALL   ;REPLACE ALL BREAKPOINTS WITH ORIGINAL DATA
E0CAFF: 80 97 =CA98 >378           BRA   ISRAM       ;UPDATE BRK WINDOW
                    >379  
                    >380  ********************************
                    >381  *  COMDMM - MEMORY MODIFY
                    >382  ********************************
                    >383  
            =E0CB01 >384  COMDMM   EQU   *          
E0CB01: F0 06 =CB09 >385           BEQ   :MMNOADD   ;IF NO ADDRESS FOLLOWS
E0CB03: 20 C6 CF    >386           JSR   TRANSFR1   ;GET ADDRESS
E0CB06: 1B          >387           DFB   LOADMEMC   ;CODE
E0CB07: B0 56 =CB5F >388           BCS   BPERR1     
                    >389  :MMNOADD                  
E0CB09: 20 D0 CC    >390           JSR   DSMEMCOL   ;DISPLAY MEM POINTER :
E0CB0C: A0 00       >391           LDY   #0         
E0CB0E: 20 F7 CC    >392           JSR   SPCBYTE     ;DISPLAY SPACE, BYTE
E0CB11: A9 A0       >393           LDA   #$A0       
E0CB13: 20 C6 CF    >394           JSR   TRANSFR1   ;SPACE
E0CB16: 07          >395           DFB   COUTC       ;code
E0CB17: 20 C6 CF    >396           JSR   TRANSFR1   ;READ NEXT CHARACTER
E0CB1A: 17          >397           DFB   RDCHARC     ;CODE
E0CB1B: C9 8B       >398           CMP   #UPARROW   
E0CB1D: F0 2E =CB4D >399           BEQ   :MMDECP     ;IF UP ARROW
E0CB1F: C9 8A       >400           CMP   #DNARROW   
E0CB21: F0 20 =CB43 >401           BEQ   :INCWCR     ;IF DOWN ARROW
E0CB23: C9 8D       >402           CMP   #CR         ;IS IT RETURN
E0CB25: F0 1C =CB43 >403           BEQ   :INCWCR     ;IF YES GO TO NEXT ADDR
E0CB27: A2 00       >404           LDX   #0         
E0CB29: 20 C6 CF    >405           JSR   TRANSFR1   ;GET INPUT NUMBER
E0CB2C: 67          >406           DFB   GETLNNOC   ;code
E0CB2D: B0 C6 =CAF5 >407           BCS   RBTOM11     ;<esc> key so return to command level
E0CB2F: E8          >408           INX              ;MAKE X > 0
E0CB30: A0 00       >409           LDY   #0          ;FIRST CHAR
E0CB32: 20 14 CD    >410           JSR   CHKREADA   ;CHECK FOR HEX AND READ
E0CB35: B0 06 =CB3D >411           BCS   :MMERR      ;IF NOT HEX
E0CB37: 20 C6 CF    >412           JSR   TRANSFR1   ;INIT LOWADD, STORE ACC, AND VERIFY
E0CB3A: 03          >413           DFB   INITMMVC   ;CODE
E0CB3B: F0 0A =CB47 >414           BEQ   :INCPC      ;IF OK
E0CB3D: 20 C6 CF    >415  :MMERR   JSR   TRANSFR1   ;BEEP
E0CB40: 77          >416           DFB   BELLC       ;CODE
E0CB41: 80 C6 =CB09 >417           BRA   :MMNOADD   ;DISPLAY
E0CB43: 20 C6 CF    >418  :INCWCR  JSR   TRANSFR1   
E0CB46: 0F          >419           DFB   CROUTC      ;CODE
E0CB47: 20 C6 CF    >420  :INCPC   JSR   TRANSFR1   ;INCREMENT MEMLOW & MEMHI
E0CB4A: 13          >421           DFB   INCMEMLHC  ;CODE
E0CB4B: 80 BC =CB09 >422           BRA   :MMNOADD   ;NEXT LOCATAION
E0CB4D: 20 C6 CF    >423  :MMDECP  JSR   TRANSFR1   
E0CB50: 0F          >424           DFB   CROUTC      ;code
E0CB51: 20 C6 CF    >425           JSR   TRANSFR1   
E0CB54: 0B          >426           DFB   DECMEMLHC  ;code
E0CB55: 80 B2 =CB09 >427           BRA   :MMNOADD   ;GO BACK ONE ADDRESS
                    >428  
                    >429  ********************************
                    >430  *  COMDMD - MEMORY DISPLAY
                    >431  ********************************
                    >432  
            =E0CB57 >433  COMDMD   EQU   *          
E0CB57: F0 0E =CB67 >434           BEQ   MDNOADDR   ;IF NO ADDRESS FOLLOWS
E0CB59: 20 C6 CF    >435           JSR   TRANSFR1   ;GET ADDRESS
E0CB5C: 1B          >436           DFB   LOADMEMC   ;CODE
E0CB5D: 90 08 =CB67 >437           BCC   MDNOADDR   
E0CB5F: A9 04       >438  BPERR1   LDA   #BADPAR     ;BAD PARAMETER ERROR NUMBER
                    >439  ERREXIT1                  
E0CB61: 20 C6 CF    >440           JSR   TRANSFR1   ;INDICATE ERROR
E0CB64: 2D          >441           DFB   ERRBEEPC   ;code
E0CB65: 80 41 =CBA8 >442           BRA   MTOM10     ;goes to GETCOM1
                    >443  MDNOADDR                  
E0CB67: 20 C6 CF    >444           JSR   TRANSFR1   ;FULL SCREEN
E0CB6A: 2C          >445           DFB   WINDFULC   ;CODE
E0CB6B: A9 10       >446  MDAGAIN  LDA   #16         ;DISPLAY 16 LINES
E0CB6D: 48          >447  MDLOOP   PHA              ;SAVE
E0CB6E: 20 9D CC    >448           JSR   MEMDISP     ;DISPLAY LINE OF MEMORY
E0CB71: 18          >449           CLC              
E0CB72: AD 3D C8    >450           LDA   MEMLOW     
E0CB75: 69 10       >451           ADC   #16        
E0CB77: 8D 3D C8    >452           STA   MEMLOW     
E0CB7A: AD 3E C8    >453           LDA   MEMHI      
E0CB7D: 69 00       >454           ADC   #0         
E0CB7F: 8D 3E C8    >455           STA   MEMHI      
E0CB82: 68          >456           PLA              
E0CB83: 38          >457           SEC              
E0CB84: E9 01       >458           SBC   #1         
E0CB86: D0 E5 =CB6D >459           BNE   MDLOOP     
E0CB88: 20 C6 CF    >460           JSR   TRANSFR1   ;"(return/esc)" C=0 on return, C=1 on esc
E0CB8B: 55          >461           DFB   WAITCRC     ;code
E0CB8C: B0 16 =CBA4 >462           BCS   WINDM10    
E0CB8E: 90 DB =CB6B >463           BCC   MDAGAIN     ;do another screen full
                    >464  
                    >465  ********************************
                    >466  *  COMDM - MENU
                    >467  ********************************
                    >468  
                    >469  CMDMENU                   
E0CB90: 20 C6 CF    >470           JSR   TRANSFR1   ;FULL SCREEN
E0CB93: 2C          >471           DFB   WINDFULC   ;CODE
E0CB94: F4 2D C8    >472           PEA   MSGAVAIL   ;message location
E0CB97: 20 D5 CD    >473           JSR   WRITE1      ;display it
                    >474  
                    >475  * MAX MESSAGE LENGTH IS 256 BYTES
                    >476  
E0CB9A: F4 D6 C8    >477           PEA   MSGAVAL2   ;message location
E0CB9D: 20 D5 CD    >478           JSR   WRITE1      ;display it
                    >479  
E0CBA0: 20 C6 CF    >480           JSR   TRANSFR1   ;"(return/esc)" C=0 on return, C=1 on esc
E0CBA3: 55          >481           DFB   WAITCRC     ;code
E0CBA4: 20 C6 CF    >482  WINDM10  JSR   TRANSFR1   ;redisplay windows
E0CBA7: 8E          >483           DFB   DISPONC     ;code
                    >484  
E0CBA8: 4C DF CE    >485  MTOM10   JMP   GETCOM1    
                    >486  
                    >487  ******************************
                    >488  *  COMDQU - QUIT
                    >489  ******************************
                    >490  
                    >491  * Allows entering DDT as a subroutine, doing your
                    >492  * debugging and returning to your program.
                    >493  * RESTORE ALL REGISTERS, DISABLE VIA, DO AN RTS BACK TO USER
                    >494  
E0CBAB: 38          >495  COMDQU   SEC              ;indicate "QU" command
E0CBAC: B8          >496           CLV              ;cloaking device off
E0CBAD: 80 1C =CBCB >497           BRA   ASTAST     
                    >498  
                    >499  *-------------------------------------------------
                    >500  *  COMD** [I,C] -
                    >501  *  **   - Enter Monitor, ^Y vector enabled, interrupts enabled
                    >502  *  ** I - Enter Monitor, ^Y vector enabled, interrupts disabled
                    >503  *  ** C - Enter Monitor, Cloaking device on, ^Y off, interrupts disabled
                    >504  *-------------------------------------------------
                    >505  
E0CBAF: B8          >506  COMDDAST CLV              ;assume Cloaking device off
E0CBB0: F0 13 =CBC5 >507           BEQ   :NOOPT     ;if no option given, command was "** "
E0CBB2: C9 C9       >508           CMP   #"I"       ;interrupts disabled?
E0CBB4: F0 06 =CBBC >509           BEQ   :OPTI      ;if yes, command was "** I"
E0CBB6: C9 C3       >510           CMP   #"C"       ;Cloaking device on?
E0CBB8: D0 A5 =CB5F >511           BNE   BPERR1     ;if no, bad parameter
                    >512  
                    >513  * command was "** C"
E0CBBA: E2 40       >514           SEP   #$40       ;V=1, Cloaking device on
                    >515  
E0CBBC: A9 04       >516  :OPTI    LDA   #$04       
E0CBBE: 0C 1E C8    >517           TSB   STATUS     ;disable interrupts
E0CBC1: A9 08       >518           LDA   #$08       ;clear Decimal flag
E0CBC3: 80 02 =CBC7 >519           BRA   :SETSTAT   
E0CBC5: A9 0C       >520  :NOOPT   LDA   #$0C       ;clear Decimal, enable Interrupts
E0CBC7: 1C 1E C8    >521  :SETSTAT TRB   STATUS     ;set status
                    >522  
E0CBCA: 18          >523           CLC              ;indicate "**" command
                    >524  
                    >525  * DISABLE VIA, RESTORE INT VECTORS, GOTO MONITOR
                    >526  
E0CBCB: 08          >527  ASTAST   PHP              ;SAVE CARRY & V
                    >528  
E0CBCC: AD F7 C8    >529           LDA   REALBRK     ;ANY REAL BRKS IN
E0CBCF: F0 0F =CBE0 >530           BEQ   :NOREALS   ;IF NO
                    >531  
                    >532  * DISPLAY WARNING MESSAGE
E0CBD1: F4 D0 C9    >533           PEA   MSGREAL     ;message location
E0CBD4: 20 D5 CD    >534           JSR   WRITE1      ;display it
                    >535  
E0CBD7: 20 C6 CF    >536           JSR   TRANSFR1   ;"(return/esc)" C=0 on return, C=1 on esc
E0CBDA: 55          >537           DFB   WAITCRC     ;code
E0CBDB: 90 03 =CBE0 >538           BCC   :NOREALS   
E0CBDD: 68          >539           PLA              ;clean up stack
E0CBDE: 80 C8 =CBA8 >540           BRA   MTOM10      ;cancel command
                    >541  
                    >542  :NOREALS                  
E0CBE0: 20 C6 CF    >543           JSR   TRANSFR1   ;RESTORE APPLE RAM
E0CBE3: 16          >544           DFB   RESTSTUFC  ;CODE
E0CBE4: A9 FF       >545           LDA   #$FF       
E0CBE6: 8D 0D C8    >546           STA   VIAIFR     
E0CBE9: A9 82       >547           LDA   #%10000010 ;ENABLE ONLY BUTTON
E0CBEB: 8D 0E C8    >548           STA   VIAIER     
                    >549  
E0CBEE: 28          >550           PLP              ;GET CARRY FLAG
E0CBEF:             >551           INDEX16          
E0CBEF: C2 10       >551           REP   #$10       
                    >551           <<<              
E0CBF1: A2 9E C9    >552           LDX   #DDTSTACK  ;USE DDT STACK SPACE
E0CBF4: 9A          >553           TXS              
E0CBF5: 08          >554           PHP              ;SAVE CARRY
E0CBF6: 20 C6 CF    >555           JSR   TRANSFR1   ;RESTORE WORK STACK SPACE
E0CBF9: 20          >556           DFB   WSTKRESC   ;code
                    >557  
E0CBFA: 28          >558           PLP              ;GET SAVED C & V
E0CBFB: AE 17 C8    >559           LDX   STACK       ;USE THIS STACK LOCATION
E0CBFE: 9A          >560           TXS              
                    >561  
                    >562  * IF LEAVING WITH "**" COMMAND, DISABLE WRITING TO CARD
E0CBFF: A9 DC       >563           LDA   #%11011100 ;CB2 LOW, CB1 POS EDGE, CA2 LOW, CA1 NEG EDGE
E0CC01: 70 02 =CC05 >564           BVS   :SETVIA    
E0CC03: A9 DE       >565           LDA   #%11011110 ;WRITING TO CARD IS OK with "*" & "QU"
E0CC05: 8D 0C C8    >566  :SETVIA  STA   VIAPCR     
                    >567  
E0CC08: A9 00       >568           LDA   #0         
E0CC0A: 48          >569           PHA              
E0CC0B: AB          >570           PLB              ;SET DBR TO 0
                    >571  
E0CC0C: B0 25 =CC33 >572           BCS   :DORTS     ;COMMAND WAS QUIT
E0CC0E: 70 18 =CC28 >573           BVS   :NOCTRLY   ;Cloaking device is on so don't enable ^Y vector
                    >574  
                    >575  * Cloaking device off so enable ^Y vector to return to DDT
E0CC10: A0 02 00    >576           LDY   #2         ;3 bytes in ^Y vector
E0CC13: B9 F8 03    >577  :REPEAT  LDA   $03F8,Y    ;get user's ^Y vector
E0CC16: 99 B5 C9    >578           STA   DDT3F8,Y   ;save in DDT ram
E0CC19: B9 30 CC    >579           LDA   :DDTCTRLY,Y ;get DDT vector
E0CC1C: 99 F8 03    >580           STA   $03F8,Y    ;put in GS ^Y vector
E0CC1F: 88          >581           DEY              
E0CC20: 10 F1 =CC13 >582           BPL   :REPEAT    ;do 3 bytes
E0CC22: AD 28 C8    >583           LDA   SLOTCN     ;set ^Y vector for current DDT slot
E0CC25: 8D FA 03    >584           STA   $03FA      
                    >585  
E0CC28: A9 00       >586  :NOCTRLY LDA   #^MONITOR  ;bank of routine
E0CC2A: A2 68 FF    >587           LDX   #MONITOR-1 ;address of Apple monitor routine
E0CC2D: 38          >588           SEC              ;set 6502 mode
E0CC2E: 80 0C =CC3C >589           BRA   :TOPLP     
                    >590  
                    >591  * load this jump into GS ^Y vector
E0CC30: 4C 08 C8    >592  :DDTCTRLY JMP  WARMENTR   ;^Y jumps to warm entry
                    >593  
                    >594  *-------------------------------------------------
                    >595  * RETURN TO USER
                    >596  
E0CC33: 2E 1B C9    >597  :DORTS   ROL   EMULATE    ;set C with Emulation bit
                    >598  
E0CC36: AD 21 C8    >599           LDA   PBR        ;user's program bank
E0CC39: AE 13 C9    >600           LDX   RET_ADD    ;GET USER'S RETURN ADDRESS
                    >601  
                    >602  * go to our slot space to do PLP, RTL incase interrupts are pending.
E0CC3C: 48          >603  :TOPLP   PHA              
E0CC3D: DA          >604           PHX              ;user's return address
E0CC3E: FB          >605           XCE              ;set mode
E0CC3F: AE 13 C8    >606           LDX   XREG       
E0CC42: AC 15 C8    >607           LDY   YREG       
E0CC45: AD 1E C8    >608           LDA   STATUS     
E0CC48: 48          >609           PHA              
E0CC49: AD 28 C8    >610           LDA   SLOTCN     
E0CC4C: 48          >611           PHA              
E0CC4D: A9 09       >612           LDA   #SLOTPLP   
E0CC4F: 48          >613           PHA              
E0CC50: 60          >614           RTS              ;go to SLOTPLP routine
                    >615  
                    >616  *----------------------*
                    >617  *   Command Li - LIST
                    >618  *----------------------*
                    >619  
            =E0CC51 >620  COMDLI   EQU   *          
E0CC51: F0 09 =CC5C >621           BEQ   LIST       ;IF NO ADDRESS FOLLOWS
E0CC53: 20 C6 CF    >622           JSR   TRANSFR1   ;GET ADDRESS
E0CC56: 1B          >623           DFB   LOADMEMC   ;CODE
E0CC57: 90 03 =CC5C >624           BCC   LIST       
E0CC59: 4C 5F CB    >625           JMP   BPERR1     ; BAD PARAETER
                    >626  
                    >627  ***** Disassemble and list 20 lines of the program
                    >628  
E0CC5C: A9 14       >629  LIST     LDA   #20        ;20 LINES
E0CC5E: 48          >630  :NEXT    PHA              ;SAVE
                    >631  
                    >632  * on return NUMDISP = # of bytes in isntruction - 1
                    >633  
E0CC5F: 20 C6 CF    >634           JSR   TRANSFR1   ;LIST 1 LINE
E0CC62: 23          >635           DFB   DISASMC    ;code
E0CC63: 38          >636           SEC              
E0CC64: AD 09 C9    >637           LDA   NUMDISP    
E0CC67: 6D 3D C8    >638           ADC   MEMLOW     
E0CC6A: 8D 3D C8    >639           STA   MEMLOW     
E0CC6D: AD 3E C8    >640           LDA   MEMHI      ;INC MEMORY POINTER
E0CC70: 69 00       >641           ADC   #0         
E0CC72: 8D 3E C8    >642           STA   MEMHI      
E0CC75: 68          >643           PLA              
E0CC76: 38          >644           SEC              
E0CC77: E9 01       >645           SBC   #1         ;DECREMENT COUNTER
E0CC79: F0 09 =CC84 >646           BEQ   :END       ;IF FINISHED
E0CC7B: AE 41 C8    >647           LDX   MLIFLAG    ;WAS THE LAST INST. AN MLI CALL
E0CC7E: D0 DE =CC5E >648           BNE   :NEXT      ;IF NO
E0CC80: E9 01       >649           SBC   #1         ;COMPENSATE FOR XTRA LINE OF MLI
E0CC82: D0 DA =CC5E >650           BNE   :NEXT      
E0CC84: 4C DF CE    >651  :END     JMP   GETCOM1    
                    >652  
                    >653  
                    >654  *-------------------------------------------------
                    >655  *  SUBROUTINES
                    >656  *-------------------------------------------------
                    >657  
                    >658  * CLEAR ALL OF THE BREAKPOINTS
                    >659  
E0CC87: AC F8 C8    >660  CLEARALL LDY   POINT       ;GET POINTER
E0CC8A: F0 08 =CC94 >661           BEQ   CLRHARD     ;BP'S ALL GONE
E0CC8C: 88          >662           DEY              ;POINT AT BRL
E0CC8D: 20 C6 CF    >663           JSR   TRANSFR1   ;REPLACE BRK WITH ORIG DATA
E0CC90: 42          >664           DFB   REPLACEC   
E0CC91: 4C 87 CC    >665           JMP   CLEARALL   ;LOOP UNTIL DONE
E0CC94: A9 EF       >666  CLRHARD  LDA   #%11101111 ;DISABLE HARDWARE BREAK
E0CC96: 2D 43 C8    >667           AND   IERBUFF     ;SET IER FLAG FOR HARDWARE BREAK TO ZERO (CA1)
E0CC99: 8D 43 C8    >668           STA   IERBUFF    
E0CC9C: 60          >669           RTS              
                    >670  
                    >671  *-------------------------------------------------
                    >672  * DISPLAY ONE LINE OF MEMORY
                    >673  
            =E0CC9D >674  MEMDISP  EQU   *          
E0CC9D: 20 D0 CC    >675           JSR   DSMEMCOL   ;DISPLAY MEMORY POINTER
E0CCA0: A0 00       >676           LDY   #00        
                    >677  MMDISHEX                  
E0CCA2: 20 F7 CC    >678           JSR   SPCBYTE     ;DISPLAY SPACE BYTE
E0CCA5: C8          >679           INY              
E0CCA6: C0 10       >680           CPY   #16        
E0CCA8: D0 F8 =CCA2 >681           BNE   MMDISHEX   
E0CCAA: A2 02       >682           LDX   #2         
E0CCAC: 20 C6 CF    >683           JSR   TRANSFR1   ;2 SPACES
E0CCAF: 27          >684           DFB   PRBL2C      ;CODE
E0CCB0: A0 00       >685           LDY   #00        
                    >686  MMDISASC                  
E0CCB2: 20 C6 CF    >687           JSR   TRANSFR1   ;LDA LOWADD,Y
E0CCB5: 00          >688           DFB   LDAINDYC   ;CODE
                    >689  
                    >690  * Change control codes to normal letters so then don't mess up the display
                    >691  
E0CCB6: 09 80       >692           ORA   #$80        ;FORCE TO NEGATIVE
E0CCB8: C9 FF       >693           CMP   #$FF        ;$FF IS NOT ALLOWED
E0CCBA: F0 04 =CCC0 >694           BEQ   MAKEDOT    
E0CCBC: C9 A0       >695           CMP   #$A0       
E0CCBE: B0 02 =CCC2 >696           BGE   MMDISOK    
E0CCC0: A9 AE       >697  MAKEDOT  LDA   #"."        ;DISPLAY PERIOD
E0CCC2: 20 C6 CF    >698  MMDISOK  JSR   TRANSFR1   
E0CCC5: 07          >699           DFB   COUTC       ;CODE
E0CCC6: C8          >700           INY              ;DISPLAY THE ASCII EQUIV
E0CCC7: C0 10       >701           CPY   #16        
E0CCC9: D0 E7 =CCB2 >702           BNE   MMDISASC   
E0CCCB: 20 C6 CF    >703           JSR   TRANSFR1   ;RETURN
E0CCCE: 0F          >704           DFB   CROUTC      ;CODE
E0CCCF: 60          >705           RTS              
                    >706  
                    >707  * Display contents of MEMHI & MEMLOW
                    >708  * Display user specified bank
                    >709  
E0CCD0: AD 08 C9    >710  DSMEMCOL LDA   MEMPBR     
E0CCD3: 8D 3C C8    >711           STA   DBRDDT     ;DATA BANK TO ACCESS
E0CCD6: 20 C6 CF    >712           JSR   TRANSFR1   ;PRINT BANK NUMBER
E0CCD9: 37          >713           DFB   PRBYTEC     ;CODE
E0CCDA: A9 AF       >714           LDA   #"/"       
E0CCDC: 20 C6 CF    >715           JSR   TRANSFR1   
E0CCDF: 07          >716           DFB   COUTC       ;CODE
E0CCE0: AD 3E C8    >717           LDA   MEMHI      
E0CCE3: 8D 19 C9    >718           STA   HIADD      
E0CCE6: AE 3D C8    >719           LDX   MEMLOW     
E0CCE9: 8E 18 C9    >720           STX   LOWADD     
E0CCEC: 20 C6 CF    >721           JSR   TRANSFR1   
E0CCEF: 3F          >722           DFB   PRNTAXC     ;CODE
E0CCF0: A9 BA       >723           LDA   #":"       
E0CCF2: 20 C6 CF    >724           JSR   TRANSFR1   
E0CCF5: 07          >725           DFB   COUTC       ;CODE
E0CCF6: 60          >726           RTS              
                    >727  
                    >728  * Display space and LOWADD,Y as hex byte
                    >729  
E0CCF7: A9 A0       >730  SPCBYTE  LDA   #$A0       
E0CCF9: 20 C6 CF    >731           JSR   TRANSFR1   
E0CCFC: 07          >732           DFB   COUTC       ;CODE
E0CCFD: 20 C6 CF    >733           JSR   TRANSFR1   
E0CD00: 00          >734           DFB   LDAINDYC   ;CODE
E0CD01: 20 C6 CF    >735           JSR   TRANSFR1   
E0CD04: 37          >736           DFB   PRBYTEC     ;CODE
E0CD05: 60          >737           RTS              
                    >738  
                    >739  * Ignores spaces & returns with Z bit set when buffer empty.
                    >740  
E0CD06: B9 63 C9    >741  GETCHR   LDA   IN,Y        ;GET CHARACTER
E0CD09: C8          >742           INY              
E0CD0A: CA          >743           DEX              ;SETS ZFLAG WHEN BUFFER EMPTY
E0CD0B: F0 04 =CD11 >744           BEQ   EMPTY      
E0CD0D: C9 A0       >745           CMP   #$A0        ;IS CHARACTER A SPACE
E0CD0F: F0 F5 =CD06 >746           BEQ   GETCHR      ;IGNORE SPACES
E0CD11: 60          >747  EMPTY    RTS              
                    >748  
                    >749  * Read in the numbers (default to hex, "!" = decimal)
                    >750  * Put in (LETTER 3,2,1) OR (LETTER 3,2,1 . LETTER 6,5,4)
                    >751  * Allow the following as valid $0001, $ 0001, $1, 1, C1B etc.
                    >752  * C = 1 if no number or invalid character
                    >753  
E0CD12: 88          >754  CHKREAD  DEY              ;PUT POINTERS BACK
E0CD13: E8          >755           INX              ;TO LOOK AT LAST CHARACTER
E0CD14: A9 00       >756  CHKREADA LDA   #0         
E0CD16: 8D 7E C8    >757           STA   ADDRS2F     ;CLEAR FLAGS
E0CD19: 8D 07 C9    >758           STA   INLENGTH   
E0CD1C: A9 00       >759  READAD2  LDA   #0         
E0CD1E: 8D 7D C8    >760           STA   DTOHFLG    ;DEFAULT TO HEX
E0CD21: 20 50 CF    >761           JSR   CLRLETER   ;CLEAR LETTER 1,2,3
E0CD24: 20 06 CD    >762  SKIPDLR  JSR   GETCHR     ;GET NEXT CHAR (IGNORE SPACES)
E0CD27: F0 22 =CD4B >763           BEQ   CKRDERR    ;ERROR
E0CD29: C9 A4       >764           CMP   #"$"       ;IS CHAR A DOLLAR SIGN
E0CD2B: F0 F7 =CD24 >765           BEQ   SKIPDLR    ;IF YES
E0CD2D: C9 A1       >766           CMP   #"!"       ;DECIMAL NUMBER ?
E0CD2F: D0 05 =CD36 >767           BNE   READAD     ;IF NO
E0CD31: 8D 7D C8    >768           STA   DTOHFLG    ;IF YES, SET DEC TO HEX FLAG
E0CD34: F0 EE =CD24 >769           BEQ   SKIPDLR    
                    >770  
                    >771  * Read address in, convert to hex, store in LETTER 1,2,3
                    >772  * INLENGTH contains number of digits read
                    >773  
E0CD36: C9 B0       >774  READAD   CMP   #$B0        ;IS IT < "0"
E0CD38: 90 11 =CD4B >775           BLT   CKRDERR     ;IF YES
E0CD3A: C9 BA       >776           CMP   #$BA       
E0CD3C: 90 12 =CD50 >777           BLT   ISDEC       ;IS 0-9
E0CD3E: C9 C1       >778           CMP   #$C1        ;COMPARE WITH "A"
E0CD40: 90 09 =CD4B >779           BLT   CKRDERR    
E0CD42: C9 C7       >780           CMP   #$C7       
E0CD44: B0 05 =CD4B >781           BGE   CKRDERR    
E0CD46: 2C 7D C8    >782           BIT   DTOHFLG     ;SUPPOSED TO BE DECIMAL ?
E0CD49: 10 02 =CD4D >783           BPL   ITISHEX     ;IF NO
                    >784  
E0CD4B: 38          >785  CKRDERR  SEC              
E0CD4C: 60          >786           RTS              ;******** ERROR RTS ********
                    >787  
E0CD4D: 18          >788  ITISHEX  CLC              ;CLEAR CARRY
E0CD4E: 69 09       >789           ADC   #$9         ;ADD 9 TO CONVERT TO A-F
E0CD50: 29 0F       >790  ISDEC    AND   #$F         ;STRIP MOST SIG. DIGIT
E0CD52: 8C 47 C8    >791           STY   YBUFF      
E0CD55: A0 04       >792           LDY   #4         
E0CD57: 0E 30 C8    >793  :SHIFT   ASL   LETTER1     ; -KEEP SHIFTING IN NEW DIGITS
E0CD5A: 2E 31 C8    >794           ROL   LETTER2     ; - FROM THE RIGHT UNTIL
E0CD5D: 2E 32 C8    >795           ROL   LETTER3    
E0CD60: 88          >796           DEY              ; - OUT OF DIGITS
E0CD61: D0 F4 =CD57 >797           BNE   :SHIFT     
E0CD63: 0D 30 C8    >798           ORA   LETTER1    
E0CD66: 8D 30 C8    >799           STA   LETTER1    
E0CD69: AC 47 C8    >800           LDY   YBUFF       ;RESTORE
E0CD6C: EE 07 C9    >801           INC   INLENGTH   
E0CD6F: 20 06 CD    >802           JSR   GETCHR      ;GET NEXT CHAR IF ANY
E0CD72: F0 29 =CD9D >803           BEQ   :READEND   
E0CD74: C9 AF       >804           CMP   #"/"        ;NEW BANK ?
E0CD76: D0 15 =CD8D >805           BNE   :CHKPER     ;IF NO
E0CD78: 2C 7D C8    >806           BIT   DTOHFLG     ;CONVERT TO HEX ?
E0CD7B: 10 03 =CD80 >807           BPL   :INHEX      ;IF NO
E0CD7D: 20 E8 CE    >808           JSR   DECHEX      ;CONVERT
E0CD80: AD 30 C8    >809  :INHEX   LDA   LETTER1    
E0CD83: 8D 08 C9    >810           STA   MEMPBR      ;NEW PBR
E0CD86: 38          >811           SEC              
E0CD87: 6E F6 C8    >812           ROR   BANKENT     ;indicate bank number was entered
E0CD8A: 4C 1C CD    >813           JMP   READAD2    
E0CD8D: C9 AE       >814  :CHKPER  CMP   #"."        ;PERIOD MEANS SECOND NUMBER
E0CD8F: F0 33 =CDC4 >815           BEQ   ADDRS2      ;READ SECOND NUMBER
E0CD91: C9 DD       >816           CMP   #"]"       
E0CD93: F0 08 =CD9D >817           BEQ   :READEND   
E0CD95: C9 A9       >818           CMP   #")"       
E0CD97: F0 04 =CD9D >819           BEQ   :READEND   
E0CD99: C9 AC       >820           CMP   #","        ;USE COMMA AS DELIMITER
E0CD9B: D0 99 =CD36 >821           BNE   READAD     
                    >822  :READEND                  
E0CD9D: 2C 7D C8    >823           BIT   DTOHFLG     ;CONVERT DEC TO HEX ?
E0CDA0: 10 03 =CDA5 >824           BPL   :INHEX2     ;IF NO
E0CDA2: 20 E8 CE    >825           JSR   DECHEX      ;CONVERT
E0CDA5: 2C 7E C8    >826  :INHEX2  BIT   ADDRS2F     ;2 NUMBERS ENTERED ?
E0CDA8: 10 03 =CDAD >827           BPL   SETBANK     ;IF NO
E0CDAA: 20 5C CF    >828           JSR   SWAPLET     ;IF YES, SWAP LETTERS
                    >829  
E0CDAD: 0E F6 C8    >830  SETBANK  ASL   BANKENT     ;was a bank number entered?
E0CDB0: B0 07 =CDB9 >831           BCS   :SET        ;if yes
E0CDB2: AD 07 C9    >832           LDA   INLENGTH   ;quantity of digits input
E0CDB5: C9 05       >833           CMP   #5          ;was BANK specified ?
E0CDB7: B0 06 =CDBF >834           BGE   :YES        ;if yes
E0CDB9: AD 08 C9    >835  :SET     LDA   MEMPBR     
E0CDBC: 8D 32 C8    >836           STA   LETTER3     ;default to current MEMPBR
E0CDBF: AD 30 C8    >837  :YES     LDA   LETTER1    
E0CDC2: 18          >838           CLC              
E0CDC3: 60          >839           RTS              ;RETURN WHEN OUT OF CHARACTERS
                    >840  
                    >841  * Transfer LETTER 3,2,1 TO LETTER 6,5,4
                    >842  * Read second number into LETTER 3,2,1
                    >843  
E0CDC4: 8D 7E C8    >844  ADDRS2   STA   ADDRS2F    ;SET 2 ADDRESS FLAG
E0CDC7: 2C 7D C8    >845           BIT   DTOHFLG    ;CONVERT DEC TO HEX ?
E0CDCA: 10 03 =CDCF >846           BPL   SWAPnext   ;IF NO
E0CDCC: 20 E8 CE    >847           JSR   DECHEX     ;CONVERT
E0CDCF: 20 5C CF    >848  SWAPnext JSR   SWAPLET    ;SWAP LETTER 1,2,3 WITH LETTER 4,5,6
E0CDD2: 4C 1C CD    >849           JMP   READAD2    ;READ NEXT NUMBER
                    >850  
                    >851  *---------------------------------
                    >852  * Write text to the display device
                    >853  * The address of the text is on the stack
                    >854  * Positive numbers are RLE compressed spaces
                    >855  
                    >856  * This routine must be above $CF00
                    >857  
E0CDD5: 8C 47 C8    >858  WRITE1   STY   YBUFF       ;SAVE
E0CDD8: A0 00       >859           LDY   #0         
E0CDDA: CD 00 C8    >860  WRITLOP1 CMP   $C800       ;disable DDT RAM
E0CDDD: B3 03       >861           LDA   (3,S),Y     ;get character to display
E0CDDF: CD 00 CF    >862           CMP   $CF00       ;enable DDT RAM
E0CDE2: C8          >863           INY              ;next character
E0CDE3: C9 84       >864           CMP   #EOT        ;finished?
E0CDE5: F0 11 =CDF8 >865           BEQ   :DONE       ;if yes
E0CDE7: 29 FF       >866           AND   #$FF        ;SET FLAGS
E0CDE9: 10 06 =CDF1 >867           BPL   :SPACES     ;if compressed spaces
                    >868  
E0CDEB: 20 C6 CF    >869           JSR   TRANSFR1   ;display character
E0CDEE: 07          >870           DFB   COUTC       ;code
E0CDEF: 80 E9 =CDDA >871           BRA   WRITLOP1   ;loop until done
                    >872  
E0CDF1: AA          >873  :SPACES  TAX              
E0CDF2: 20 C6 CF    >874           JSR   TRANSFR1   ;PRINT SPACES
E0CDF5: 27          >875           DFB   PRBL2C      ;code
E0CDF6: 80 E2 =CDDA >876           BRA   WRITLOP1   ;loop until done
                    >877  
E0CDF8:             >878  :DONE    MEMORY16         
E0CDF8: C2 20       >878           REP   #$20       
                    >878           <<<              
E0CDFA: 68          >879           PLA              ;get return address
E0CDFB: 83 01       >880           STA   1,S         ;free parameter space
E0CDFD:             >881           MEMORY8          
E0CDFD: E2 20       >881           SEP   #$20       
                    >881           <<<              
E0CDFF: AC 47 C8    >882           LDY   YBUFF       ;RESTORE
E0CE02: 60          >883           RTS              
                    >884  
                    >885  *-------------------------------------------------
                    >886  * Display the breakpoints
                    >887  
E0CE03: F4 13 C8    >888  DISBKP   PEA   MSGBRKPT   ;message location
E0CE06: 20 D5 CD    >889           JSR   WRITE1      ;display it
                    >890  
E0CE09: AC F8 C8    >891           LDY   POINT       ;GET BREAKPOINT BUFFER POINTER
E0CE0C: F0 1D =CE2B >892           BEQ   :DSEND      ;ALL DONE
E0CE0E: A2 02       >893           LDX   #2         
                    >894  :DISNEXT                  
E0CE10: 88          >895           DEY              
E0CE11: 8A          >896           TXA              
E0CE12: 48          >897           PHA              ;SAVE X
E0CE13: 20 2C CE    >898           JSR   DSPBRK     
E0CE16: 68          >899           PLA              
E0CE17: AA          >900           TAX              ;RESTORE X
E0CE18: CA          >901           DEX              ;END OF ROW?
E0CE19: D0 06 =CE21 >902           BNE   :SPC        ;IF NO
E0CE1B: A2 02       >903           LDX   #2          ;2 BRKS PER ROW
E0CE1D: A9 8D       >904           LDA   #CR        ; <cr>
E0CE1F: D0 02 =CE23 >905           BNE   :NOSPC     
E0CE21: A9 A0       >906  :SPC     LDA   #$A0       ; SPACE
E0CE23: 20 C6 CF    >907  :NOSPC   JSR   TRANSFR1   ; display it
E0CE26: 07          >908           DFB   COUTC       ;code
E0CE27: C0 00       >909  :NOTSER  CPY   #0         
E0CE29: D0 E5 =CE10 >910           BNE   :DISNEXT   
E0CE2B: 60          >911  :DSEND   RTS              
                    >912  
                    >913  ***** Display the breakpoint info pointed to by Y *****
                    >914  
E0CE2C: AE 29 C8    >915  DSPBRK   LDX   SLOTN0     
                    >916  ****************************************
                    >917  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >918  ****************************************
E0CE2F: A9 61       >919           LDA   #%01100001 ;RAM6, ROM1
E0CE31: 9D 88 C0    >920           STA   SEGMBASE,X 
E0CE34: B9 96 C9    >921           LDA   BRKPASLO,Y ; used by conditional break display
E0CE37: 48          >922           PHA              
E0CE38: B9 64 C9    >923           LDA   BRKPASHI,Y ; "
E0CE3B: 48          >924           PHA              
E0CE3C: B9 32 C9    >925           LDA   BRKTGLOW,Y 
E0CE3F: 48          >926           PHA              
E0CE40: B9 00 C9    >927           LDA   BRKTGHI,Y  
E0CE43: 48          >928           PHA              
E0CE44: B9 CE C8    >929           LDA   BRKLOW,Y   
E0CE47: 48          >930           PHA              
E0CE48: B9 9C C8    >931           LDA   BRKHI,Y    
E0CE4B: 48          >932           PHA              
E0CE4C: B9 6A C8    >933           LDA   BRKPBR,Y   
E0CE4F: 48          >934           PHA              
E0CE50: B9 38 C8    >935           LDA   BRKTYPE,Y  
E0CE53: 48          >936           PHA              
                    >937  ****************************************
                    >938  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >939  ****************************************
E0CE54: A9 01       >940           LDA   #%00000001 ;RAM0, ROM1
E0CE56: 9D 88 C0    >941           STA   SEGMBASE,X 
E0CE59: 68          >942           PLA              
E0CE5A: 8D A1 C9    >943           STA   TEMP       ; save BRK type
E0CE5D: 20 C6 CF    >944           JSR   TRANSFR1   ;PRINT TYPE
E0CE60: 07          >945           DFB   COUTC       ;code
E0CE61: 68          >946           PLA              
E0CE62: 20 C6 CF    >947           JSR   TRANSFR1   ;PRINT BANK NUMBER
E0CE65: 37          >948           DFB   PRBYTEC     ;code
E0CE66: A9 AF       >949           LDA   #"/"       
E0CE68: 20 C6 CF    >950           JSR   TRANSFR1   
E0CE6B: 07          >951           DFB   COUTC       ;code
E0CE6C: 68          >952           PLA              
E0CE6D: 20 C6 CF    >953           JSR   TRANSFR1   ;PRINT ADDRS
E0CE70: 37          >954           DFB   PRBYTEC     ;code
E0CE71: 68          >955           PLA              
E0CE72: 20 C6 CF    >956           JSR   TRANSFR1   
E0CE75: 37          >957           DFB   PRBYTEC     ;code
                    >958  
E0CE76: AD A1 C9    >959           LDA   TEMP       ; get break type
E0CE79: C9 C3       >960           CMP   #"C"       ; is it conditional break?
E0CE7B: D0 38 =CEB5 >961           BNE   :NOTCOND   ; if no
E0CE7D: 68          >962           PLA              ; get conditional register offset
E0CE7E: A2 10       >963           LDX   #$10       
E0CE80: CD 00 C8    >964           CMP   $C800      ; disable DDT RAM
E0CE83: DD E0 C9    >965  :REPEAT  CMP   CregOFF+1,X ; look for register offset in table
E0CE86: D0 05 =CE8D >966           BNE   :NEXToff   ; if no match
E0CE88: BD DF C9    >967           LDA   CregOFF,X  ; get conditional register ASCII value
E0CE8B: 80 04 =CE91 >968           BRA   :gotREG    
E0CE8D: CA          >969  :NEXToff DEX              
E0CE8E: CA          >970           DEX              
E0CE8F: 10 F2 =CE83 >971           BPL   :REPEAT    ; keep looking
E0CE91: CD 00 CF    >972  :gotREG  CMP   $CF00      ; enable DDT RAM
E0CE94: 20 C6 CF    >973           JSR   TRANSFR1   ; PRINT cond register
E0CE97: 07          >974           DFB   COUTC      ; code
                    >975  
E0CE98: 68          >976           PLA              ; get conditional symbol offset
E0CE99: A2 0A       >977           LDX   #$A        
E0CE9B: CD 00 C8    >978           CMP   $C800      ; disable DDT RAM
E0CE9E: DD F2 C9    >979  :REPEAT2 CMP   CsymOFF+1,X ; look for matching offset in table
E0CEA1: D0 05 =CEA8 >980           BNE   :NEXTsym   ; if no match
E0CEA3: BD F1 C9    >981           LDA   CsymOFF,X  ; get conditional symbol ASCII value
E0CEA6: 80 04 =CEAC >982           BRA   :gotSYM    
E0CEA8: CA          >983  :NEXTsym DEX              
E0CEA9: CA          >984           DEX              
E0CEAA: 10 F2 =CE9E >985           BPL   :REPEAT2   
E0CEAC: CD 00 CF    >986  :gotSYM  CMP   $CF00      ; enable DDT RAM
E0CEAF: 20 C6 CF    >987           JSR   TRANSFR1   ; print cond symbol
E0CEB2: 07          >988           DFB   COUTC      ; code
E0CEB3: 80 0D =CEC2 >989           BRA   :CNDcont   
                    >990  
E0CEB5: A9 AE       >991  :NOTCOND LDA   #"."       
E0CEB7: 20 C6 CF    >992           JSR   TRANSFR1   ;PRINT "."
E0CEBA: 07          >993           DFB   COUTC       ;code
E0CEBB:             >994           MX16             
E0CEBB: C2 30       >994           REP   #$30       
                    >994           <<<              
E0CEBD: 68          >995           PLA              
E0CEBE: FA          >996           PLX              ; remove conditional stuff from top of stack
E0CEBF: 48          >997           PHA              
E0CEC0:             >998           MX8              
E0CEC0: E2 30       >998           SEP   #$30       
                    >998           <<<              
                    >999  
E0CEC2: 68          >1000 :CNDcont PLA              
E0CEC3: 20 C6 CF    >1001          JSR   TRANSFR1   ;PRINT NUMBER
E0CEC6: 37          >1002          DFB   PRBYTEC     ;code
E0CEC7: 68          >1003          PLA              
E0CEC8: 20 C6 CF    >1004          JSR   TRANSFR1   
E0CECB: 37          >1005          DFB   PRBYTEC     ;code
E0CECC: 60          >1006          RTS              
                    >1007 
E0CECD: F4 1C C8    >1008 DISHB    PEA   MSGHARDB   ;message location
E0CED0: 20 D5 CD    >1009          JSR   WRITE1      ;display it
                    >1010 
E0CED3: 20 C6 CF    >1011          JSR   TRANSFR1   ; finish displaying hardware break
E0CED6: 9E          >1012          DFB   DSPHBPC    ; code
E0CED7: 60          >1013          RTS              
                    >1014 
                    >1015 
                    >1016 ***** MUST BE ABOVE $CF00 *****
                    >1017 * Display invalid breakpoint message
                    >1018 
E0CED8: F4 00 C8    >1019 DISINVBP PEA   MSGINVBP   ;message location
E0CEDB: 20 D5 CD    >1020          JSR   WRITE1      ;display it
E0CEDE: 60          >1021          RTS              
                    >1022 
                    >1023 *----------------------------------------
                    >1024 *  GETCOM1 - do <CR> & get user command
                    >1025 
E0CEDF: F4 FF C9    >1026 GETCOM1  PEA   GETCOMCR-1 ;address of command
E0CEE2: F4 00 05    >1027          PEA   S_GETCOM   ;segment of command
E0CEE5: 4C B7 CF    >1028          JMP   JUMPSEG1   ;go to command
                    >1029 
                    >1030 *-------------------------------------------------
                    >1031 ** Convert the decimal number in LETTER 3,2,1 to hex
                    >1032 
E0CEE8: 8E 49 C8    >1033 DECHEX   STX   XBUFF      
E0CEEB: A2 02       >1034          LDX   #2         
                    >1035 :LOADDEC                  
E0CEED: BD 30 C8    >1036          LDA   LETTER1,X  ;LETTER 1,2,3 TO
E0CEF0: 9D 39 C8    >1037          STA   DECIMAL1,X ;DECIMAL 1,2,3
E0CEF3: CA          >1038          DEX              
E0CEF4: 10 F7 =CEED >1039          BPL   :LOADDEC   
E0CEF6: 20 50 CF    >1040          JSR   CLRLETER   ;LETTER 1,2,3 TO 0
E0CEF9: AE 3B C8    >1041          LDX   DECIMAL3   ;M.S. 2 DIGITS
E0CEFC: F0 10 =CF0E >1042          BEQ   :TRYDEC2   
E0CEFE: A9 10       >1043 :DEC3    LDA   #$10        ;ADD 10,000 DEC
E0CF00: 20 30 CF    >1044          JSR   ADDL1       ;
E0CF03: A9 27       >1045          LDA   #$27        ;IN HEX FORM $2710
E0CF05: 18          >1046          CLC              
E0CF06: 20 39 CF    >1047          JSR   ADDL2      
E0CF09: 20 48 CF    >1048          JSR   SUBD1      
E0CF0C: D0 F0 =CEFE >1049          BNE   :DEC3       ;MORE 10,000
                    >1050 :TRYDEC2                  
E0CF0E: AE 3A C8    >1051          LDX   DECIMAL2   
E0CF11: F0 0A =CF1D >1052          BEQ   :TRYDEC1   
E0CF13: A9 64       >1053 :DEC2    LDA   #$64       
E0CF15: 20 30 CF    >1054          JSR   ADDL1      
E0CF18: 20 48 CF    >1055          JSR   SUBD1      
E0CF1B: D0 F6 =CF13 >1056          BNE   :DEC2      
                    >1057 :TRYDEC1                  
E0CF1D: AE 39 C8    >1058          LDX   DECIMAL1   
E0CF20: F0 0A =CF2C >1059          BEQ   DHRTS      
E0CF22: A9 01       >1060 :DEC1    LDA   #1         
E0CF24: 20 30 CF    >1061          JSR   ADDL1      
E0CF27: 20 48 CF    >1062          JSR   SUBD1      
E0CF2A: D0 F6 =CF22 >1063          BNE   :DEC1      
E0CF2C: AE 49 C8    >1064 DHRTS    LDX   XBUFF       ;RESTORE
E0CF2F: 60          >1065          RTS              
                    >1066 
E0CF30: 18          >1067 ADDL1    CLC              
E0CF31: 6D 30 C8    >1068          ADC   LETTER1    
E0CF34: 8D 30 C8    >1069          STA   LETTER1    
E0CF37: A9 00       >1070          LDA   #0         
E0CF39: 6D 31 C8    >1071 ADDL2    ADC   LETTER2    
E0CF3C: 8D 31 C8    >1072          STA   LETTER2    
E0CF3F: A9 00       >1073          LDA   #0         
E0CF41: 6D 32 C8    >1074          ADC   LETTER3    
E0CF44: 8D 32 C8    >1075          STA   LETTER3    
E0CF47: 60          >1076          RTS              
                    >1077 
E0CF48: 8A          >1078 SUBD1    TXA              
E0CF49: F8          >1079          SED              
E0CF4A: 38          >1080          SEC              
E0CF4B: E9 01       >1081          SBC   #1         
E0CF4D: D8          >1082          CLD              
E0CF4E: AA          >1083          TAX              
E0CF4F: 60          >1084          RTS              
                    >1085 
E0CF50: A9 00       >1086 CLRLETER LDA   #0         
E0CF52: 8D 30 C8    >1087          STA   LETTER1    
E0CF55: 8D 31 C8    >1088          STA   LETTER2    
E0CF58: 8D 32 C8    >1089          STA   LETTER3    
E0CF5B: 60          >1090          RTS              
                    >1091 
                    >1092 * Swap LETTER 1,2,3 with LETTER 4,5,6
                    >1093 
E0CF5C: 20 AD CD    >1094 SWAPLET  JSR   SETBANK     ;set letter3 to MEMPBR if bank was entered
E0CF5F: 8E 49 C8    >1095          STX   XBUFF      
E0CF62: 8C 47 C8    >1096          STY   YBUFF      
E0CF65: A2 02       >1097          LDX   #2         
E0CF67: BD 30 C8    >1098 :SWAP    LDA   LETTER1,X  
E0CF6A: BC 33 C8    >1099          LDY   LETTER4,X  
E0CF6D: 9D 33 C8    >1100          STA   LETTER4,X  
E0CF70: 98          >1101          TYA              
E0CF71: 9D 30 C8    >1102          STA   LETTER1,X  
E0CF74: CA          >1103          DEX              
E0CF75: 10 F0 =CF67 >1104          BPL   :SWAP      
E0CF77: AC 47 C8    >1105          LDY   YBUFF      
E0CF7A: AE 49 C8    >1106          LDX   XBUFF      
E0CF7D: 60          >1107          RTS              
                    >1108 
                    >1109 ***** GLOBAL SUBROUTINES IN THIS SEGMENT *****
                    >1110 
                    >1111 SUBTABL1                  
                    >1112 
            =0101   >1113 GETCHRC  EQU   *-SUBTABL1*4+1+$100 
E0CF7E: 05 CD       >1114          DA    GETCHR-1   
                    >1115 
            =0109   >1116 CHKREADC EQU   *-SUBTABL1*4+1+$100 
E0CF80: 11 CD       >1117          DA    CHKREAD-1  
                    >1118 
            =0111   >1119 CHKREADAC EQU  *-SUBTABL1*4+1+$100 
E0CF82: 13 CD       >1120          DA    CHKREADA-1 
                    >1121 
            =0119   >1122 DSMEMCOLC EQU  *-SUBTABL1*4+1+$100 
E0CF84: CF CC       >1123          DA    DSMEMCOL-1 
                    >1124 
            =0121   >1125 DSPBRKC  EQU   *-SUBTABL1*4+1+$100 
E0CF86: 2B CE       >1126          DA    DSPBRK-1   
                    >1127 
                    >1128 *****************************************
                    >1129 *  SEGMENT CROSSOVER AREA  *
                    >1130 *****************************************
                    >1131 
            =0009   >1133 S1END    =     $E0CF91-*  
                    >1134          do    nolist     
                    >1135          LST   OFF        
                    >1136          fin              
                    >1137          ERR   *-1/$E0CF91 
E0CF88: FF FF FF FF >1138          DS    $E0CF91-*,$FF 
                    >1139 
                    >1140 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1141 * Returns with MX = 11, saves registers
                    >1142 
                    >1143 SAVEAXP1                  
E0CF91: 08          >1144          PHP              ;SAVE STATUS
E0CF92:             >1145          MX16             
E0CF92: C2 30       >1145          REP   #$30       
                    >1145          <<<              
E0CF94: 8E 63 C8    >1146          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1147          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1148          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1149          MX8              
E0CF9D: E2 30       >1149          SEP   #$30       
                    >1149          <<<              
E0CF9F: 68          >1150          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1151          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1152          RTS              
                    >1153 
                    >1154 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1155 * restores registers
                    >1156 
                    >1157 RESTAXP1                  
E0CFA4:             >1158          MEMORY8          
E0CFA4: E2 20       >1158          SEP   #$20       
                    >1158          <<<              
E0CFA6: AD 67 C8    >1159          LDA   PSAVESEG   
E0CFA9: 48          >1160          PHA              
E0CFAA:             >1161          MX16             
E0CFAA: C2 30       >1161          REP   #$30       
                    >1161          <<<              
E0CFAC: AE 63 C8    >1162          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1163          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1164          LDA   ASAVESEG   
E0CFB5: 28          >1165          PLP              
E0CFB6: 60          >1166          RTS              
                    >1167          MX    %11        
                    >1168 
                    >1169 *----------------------------------------
                    >1170 * Do a direct transfer to other segments
                    >1171 
                    >1172 JUMPSEG1                  
E0CFB7: 20 91 CF    >1173          JSR   SAVEAXP1   
E0CFBA: AC 29 C8    >1174          LDY   SLOTN0     
E0CFBD: 68          >1175          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1176          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1177          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1178          JSR   RESTAXP1   ;restore after xfer from other seg
E0CFC5: 60          >1179          RTS              ;pull destination address from stack
                    >1180 
                    >1181 * TRANSFER TO OTHER SEGMENTS
                    >1182 
                    >1183 TRANSFR1                  
E0CFC6: 20 91 CF    >1184          JSR   SAVEAXP1   
E0CFC9:             >1185          MEMORY16         
E0CFC9: C2 20       >1185          REP   #$20       
                    >1185          <<<              
E0CFCB: 68          >1186          PLA              ;get return address from stack
E0CFCC: 1A          >1187          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1188          PHA              
E0CFCE:             >1189          MEMORY8          
E0CFCE: E2 20       >1189          SEP   #$20       
                    >1189          <<<              
E0CFD0: A9 01       >1190          LDA   #1          ;CURRENT SEG #
E0CFD2: 48          >1191          PHA              
E0CFD3: A0 00       >1192          LDY   #0         
E0CFD5: B3 02       >1193          LDA   (2,S),Y     ;GET CODE BYTE
E0CFD7: 48          >1194          PHA              ;SAVE CODE
E0CFD8: 29 07       >1195          AND   #$07        ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1196          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1197          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1198 * NEW SEGMENT
E0CFE0: 68          >1199          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1200          PEA   RETURN1     ;where to return to
E0CFE4: 29 F8       >1201          AND   #$F8        ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1202          LSR              
E0CFE7: 4A          >1203          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1204 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1205          TAY              
E0CFE9:             >1206          MEMORY16         
E0CFE9: C2 20       >1206          REP   #$20       
                    >1206          <<<              
E0CFEB: B9 7E CF    >1207          LDA   SUBTABL1,Y 
E0CFEE: 48          >1208          PHA              
E0CFEF: 80 B3 =CFA4 >1209          BRA   RESTAXP1   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1210          MX    %11        
                    >1211 
                    >1212 * RETURN HERE FROM SUBROUTINE
                    >1213 
            =E0CFF0 >1214 RETURN1  EQU   *-1        
E0CFF1: 20 91 CF    >1215          JSR   SAVEAXP1   
E0CFF4: 68          >1216          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1217          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1218          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1219          BRA   RESTAXP1   
                    >1220 
E0CFFD: FF FF FF    >1221          DS    \,$FF       ;PUT OBJECT AT NEXT PAGE
                     42            PUT   SEG2       
                    >2    *********************************
                    >3    *           SEG2
                    >4    *********************************
                    >5    
                    >6    ]segnum  =     #$0200      ;current segment number
                    >7    
                    >8             ORG   $E0C800     ;CODE RUNS HERE
                    >9    
                    >10   * This space is shared with the VIA and the RAM.
                    >11   
                    >12   *************** MESSAGES *************
                    >13   
                    >14   * The following string is used for displaying register labels.
                    >15   
E0C800: C1 BD       >16   MSGREGA  ASC   "A="       
E0C802: 84          >17            DFB   EOT        
E0C803: A0 D8 BD    >18            ASC   " X="      
E0C806: 84          >19            DFB   EOT        
E0C807: A0 D9 BD    >20            ASC   " Y="      
E0C80A: 84          >21            DFB   EOT        
E0C80B: A0 D3 BD    >22            ASC   " S="      
E0C80E: 84          >23            DFB   EOT        
E0C80F: A0 C4 BD    >24            ASC   " D="      
E0C812: 84          >25            DFB   EOT        
E0C813: A0 C2 BD    >26            ASC   " B="      
E0C816: 84          >27            DFB   EOT        
E0C817: A0 A0 CD BD >28            ASC   "  M="     
E0C81B: 84          >29            DFB   EOT        
E0C81C: A0 D1 BD    >30            ASC   " Q="      
E0C81F: 84          >31            DFB   EOT        
E0C820: A0 D0 BD    >32            ASC   " P="      
E0C823: 84          >33            DFB   EOT        
E0C824: A0 CC BD    >34            ASC   " L="      
E0C827: 84          >35            DFB   EOT        
E0C828: A0 C5 BD    >36            ASC   " E="      
E0C82B: 84          >37            DFB   EOT        
E0C82C: A0 C9 BD    >38            ASC   " I="      
E0C82F: 84          >39            DFB   EOT        
                    >40   
                    >41   
                    >42   * The following string is used for displaying the status flags.
                    >43   
E0C830: CE D6 B1 C2 >44   FLAGS    ASC   "NV1BDIZC" 
E0C838: CE D6 CD D8 >45   FLAGS16  ASC   "NVMXDIZC" 
                    >46   
                    >47   **************************************************
                    >48   * The following routines are run from the cards I/O space.
                    >49   
                    >50            MX    %11        
                    >51   
                    >52   *----------------------------------------
                    >53   *   ---- SEG0 ROUTINES ----
                    >54   * Disable the CXROM from the I/O space before entering DDT slot space
                    >55   * The user's program is vectored here during interrupts.
                    >56   
E0C840: EA          >57   IOSTUF0  NOP              ;reserved
E0C841: 08          >58            PHP              ;save post interrupt status
E0C842:             >59            MEMORY8          
E0C842: E2 20       >59            SEP   #$20       
                    >59            <<<              
E0C844: 48          >60            PHA              ;save ACC
E0C845: AF 15 C0 E0 >61            LDAL  CXFLAG      ;get CXROM status
E0C849: 8F 06 C0 E0 >62            STAL  SLOTROM     ;turn CXROM off
E0C84D: 4C 6A C8    >63            JMP   SLOTINT     ;goto slot space interrupt handler
                    >64   
                    >65   *----------------------------------------
                    >66   *   ---- SEG1 ROUTINES ----
                    >67   * Part1 of goto user's code or LDA/STA one byte
                    >68   
                    >69   * Hard coded to slot #3 for now.
                    >70   
E0C850: CF FF CF E0 >71   IOSTUF1  CMPL  $E0CFFF     ;2K ROM off
E0C854: CF 00 C3 E0 >72            CMPL  $E0C300     ;activate user's peripheral card
E0C858: 8F 08 C0 E0 >73            STAL  $E0C008     ;bank switch (08 ORed with n0+80)
                    >74   
                    >75   *----------------------------------------
                    >76   *   ---- SEG7 ROUTINES ----
                    >77   * Part2 of goto user's code
                    >78   
E0C85C: EA          >79   IOSTUF7  NOP              
E0C85D: EA          >80            NOP              ;reserved
E0C85E: EA          >81            NOP              
E0C85F: 8F 07 C0 E0 >82   :TOP7    STAL  $E0C007     ;CXROM on or $C006 CXROM off
E0C863: A9 00       >83            LDA   #00         ;restore Acc
E0C865: 40          >84            RTI              ;goto user's code OR PLP
E0C866: 5C 6C BC FF >85            JML   $FFBC6C     ;goto GS interrupt handler, used by TOGSINT
                    >86   * Start here
E0C86A: 80 F3 =C85F >87            BRA   :TOP7      
                    >88   
                    >89   *----------------------------------------
                    >90   *   ---- SEG8 ROUTINES ----
                    >91   * Part2 of LDA or STA one byte
                    >92   * The bank register remains at $E0 during this code
                    >93   
                    >94   IOSTUF8                   
E0C86C: 8D 07 C0    >95   :TOP8    STA   $C007       ;activate CXROM or $C006 keep CXROM off
E0C86F: EB          >96            XBA              ;restore Acc
E0C870: EA          >97            nop              
E0C871: EA          >98            nop              
E0C872: EA          >99            nop              ;space fillers for LDAL,X or STAL,X
E0C873: EA          >100           nop              
E0C874: 8D 06 C0    >101           STA   SLOTROM     ;CXROM off
E0C877: 4C 78 C8    >102           JMP   SLOTRTS     ;Return to our slot routine
                    >103  * Start here
E0C87A: 80 F0 =C86C >104           BRA   :TOP8      
                    >105  
                    >106  
                    >107  ****************************************
                    >108  *   CAUTION  segement dependent code   *
                    >109  ****************************************
                    >110  
                    >111  *----------------------------
                    >112  * Transfer the IO routines to IO space
                    >113  * Enter with X = slotn0
                    >114  * Parameters passed on stack
                    >115  * !!!!! NOTE Stack can NOT be in DDT RAM !!!!!
                    >116  
E0C87C: A9 02       >117  XFRIO    LDA   #%00000010 ;RAM0, ROM2
E0C87E: 9D 88 C0    >118           STA   SEGMBASE,X 
E0C881: A0 0F       >119           LDY   #15        
E0C883: B9 40 C8    >120  :SEG0    LDA   IOSTUF0,Y  
E0C886: 99 80 C8    >121           STA   IOSPACE0,Y 
E0C889: 88          >122           DEY              
E0C88A: 10 F7 =C883 >123           BPL   :SEG0      
E0C88C: A3 03       >124           LDA   3,S         ;get slotCn
E0C88E: 8D 8F C8    >125           STA   IOCN0       ;set for current slot
                    >126  
E0C891: A9 12       >127           LDA   #%00010010 ;RAM1, ROM2
E0C893: 9D 88 C0    >128           STA   SEGMBASE,X 
E0C896: A0 0B       >129           LDY   #11        
E0C898: B9 50 C8    >130  :SEG1    LDA   IOSTUF1,Y  
E0C89B: 99 82 C8    >131           STA   IOSPACE1,Y 
E0C89E: 88          >132           DEY              
E0C89F: 10 F7 =C898 >133           BPL   :SEG1      
E0C8A1: A3 04       >134           LDA   4,S         ;get slotn0+$80
                    >135  
E0C8A3: 0D 59 C8    >136           ORA   IOSTUF1+9  ;set IOSEGM value for current slot
E0C8A6: 8D 8B C8    >137           STA   IOSEGM      ;set for current slot
                    >138  * TSB IOSEGM ;this statement OR the above 2?
                    >139  
E0C8A9: A3 04       >140           LDA   4,S        ;get slotn0+$80
E0C8AB: 09 02       >141           ORA   #IOSPACE1-$80 ;add offset to start of SEG1 code
E0C8AD: 8D 15 C8    >142           STA   TOSLOTC0   ;init JMP() vector
E0C8B0: A9 C0       >143           LDA   #$C0        ;  to point to I/O routines
E0C8B2: 8D 16 C8    >144           STA   TOSLOTC0+1 
                    >145  
E0C8B5: A9 72       >146           LDA   #%01110010 ;RAM7, ROM2
E0C8B7: 9D 88 C0    >147           STA   SEGMBASE,X 
E0C8BA: A0 0F       >148           LDY   #15        
E0C8BC: B9 5C C8    >149  :SEG7    LDA   IOSTUF7,Y  
E0C8BF: 99 80 C8    >150           STA   IOSPACE7,Y 
E0C8C2: 88          >151           DEY              
E0C8C3: 10 F7 =C8BC >152           BPL   :SEG7      
                    >153  
E0C8C5: A9 82       >154           LDA   #%10000010 ;RAM8, ROM2
E0C8C7: 9D 88 C0    >155           STA   SEGMBASE,X 
E0C8CA: A0 0F       >156           LDY   #15        
E0C8CC: B9 6C C8    >157  :SEG8    LDA   IOSTUF8,Y  
E0C8CF: 99 80 C8    >158           STA   IOSPACE8,Y 
E0C8D2: 88          >159           DEY              
E0C8D3: 10 F7 =C8CC >160           BPL   :SEG8      
E0C8D5: A3 03       >161           LDA   3,S         ;get slotCn
E0C8D7: 8D 8D C8    >162           STA   IOSPACE8+13 ;set for current slot
                    >163  
E0C8DA: A9 02       >164           LDA   #%00000010 ;RAM0, ROM2
E0C8DC: 9D 88 C0    >165           STA   SEGMBASE,X 
E0C8DF: 4C C5 CF    >166           JMP   SEG2RTS     ;jmp to RTS to reenable DDT RAM
                    >167  
                    >168  *--------------------
            =E0C8E2 >169  MSGMODE  EQU   *          
E0C8E2: 8D          >170           DFB   CR         
E0C8E3: AD AD AD A0 >171           ASC   "--- Mode of Operation ---" 
E0C8FC: 8D 8D       >172           DFB   CR,CR      
                    >173  
E0C8FE: D4 E5 F8 F4 >174           ASC   "Text screen save" 
E0C90E: 8D          >175           DFB   CR         
E0C90F: B1 BD EF EE >176           ASC   "1=on  2=off" 
E0C91A: 84          >177           DFB   EOT        
                    >178  
E0C91B: 8D          >179           DFB   CR         
E0C91C: C3 D0 D5    >180           ASC   "CPU"      
E0C91F: 8D          >181           DFB   CR         
E0C920: B1 BD B6 B5 >182           ASC   "1=6502  2=65C02  3=65816" 
E0C938: 84          >183           DFB   EOT        
                    >184  
E0C939: 8D          >185           DFB   CR         
E0C93A: C9 AF CF A0 >186           ASC   "I/O slot #" 
E0C944: 8D          >187           DFB   CR         
E0C945: B1 BA EF F5 >188           ASC   "1:out  2:in/out  3:normal" 
E0C95E: 84          >189           DFB   EOT        
                    >190  
                    >191  
E0C95F: 8D          >192  MSGENTER DFB   CR         
E0C960: C5 EE F4 E5 >193           ASC   "Enter <"  ;put current setting in brackets
E0C967: 84          >194           DFB   EOT        
E0C968: BE A0 BA    >195           ASC   "> :"      
E0C96B: 84          >196           DFB   EOT        
                    >197  
                    >198  * messages for execution time
                    >199  
            =E0C96C >200  MSGET    EQU   *          
E0C96C: CD C5 C7 C1 >201           ASC   "MEGA][ cycles = $" 
E0C97D: 84          >202           DFB   EOT        
                    >203  
E0C97E: A0 A8 F8 A0 >204  FASTET   ASC   " (x ~2.6)" 
E0C987: 84          >205           DFB   EOT        
                    >206  
                    >207  
                    >208  ****************************************
                    >209  * THIS POINT MUST BE $CA00 OR ABOVE.
                    >210  ****************************************
                    >211  
                    >212           ERR   *-1/$E0CA00 
E0C988: FF FF FF FF >213           DS    $E0CA00-*,$FF 
                    >214  
                    >215  * Replace the original instruction with a BRK command
                    >216  * Set carry if we have a break there already
                    >217  
E0CA00: 20 5D CD    >218  PUTBREAK JSR   VALIDAD     ;ALREADY HAVE A BRK THERE?,PUT Y IN YBUFF
E0CA03: 30 03 =CA08 >219           BMI   PUTBRK2     ;IF NO
E0CA05: 20 6C CC    >220           JSR   REPLACE     ;IF YES, REMOVE OLD BRK
E0CA08: AD 38 C8    >221  PUTBRK2  LDA   SBTYPE      ;GET SB TYPE
E0CA0B: C9 C9       >222           CMP   #"I"        ;IS IT IMPLIED
E0CA0D: F0 27 =CA36 >223           BEQ   UPDATE      ;IF YES
                    >224  
E0CA0F:             >225           MEMORY16         
E0CA0F: C2 20       >225           REP   #$20       
                    >225           <<<              
E0CA11: AD 30 C8    >226           LDA   LETTER1    
E0CA14: 8D 18 C9    >227           STA   LOWADD      ;SETUP POINTER
E0CA17:             >228           MEMORY8          
E0CA17: E2 20       >228           SEP   #$20       
                    >228           <<<              
E0CA19: AD 32 C8    >229           LDA   LETTER3    
E0CA1C: 8D 3C C8    >230           STA   DBRDDT      ;BANK #
                    >231  
E0CA1F: A0 00       >232           LDY   #0         
E0CA21: 20 C6 CF    >233           JSR   TRANSFR2   ;READ DATA AT BREAKPOINT ADDRESS
E0CA24: 00          >234           DFB   LDAINDYC   ;CODE
E0CA25: 8D 2F C8    >235           STA   DATABRK     ;SAVE ORIG DATA
E0CA28: 98          >236           TYA              ;LOAD ACC WITH 00
E0CA29: 20 C6 CF    >237           JSR   TRANSFR2   ;STORE BREAK
E0CA2C: 08          >238           DFB   STAINDYC   ;CODE
E0CA2D: 20 C6 CF    >239           JSR   TRANSFR2   ;VERIFY THAT LOCATION WAS RAM, SET Z BIT IF OK
E0CA30: 00          >240           DFB   LDAINDYC   ;CODE
E0CA31: D0 5E =CA91 >241           BNE   PUTDONE     ;ERROR, "NOT RAM"
E0CA33: EE F7 C8    >242           INC   REALBRK     ;COUNT REAL BREAKS
                    >243  
                    >244  * Update the breakpoint list.
                    >245  
E0CA36: AC F8 C8    >246  UPDATE   LDY   POINT       ;BRK STACK POINTER
E0CA39: 8E 49 C8    >247           STX   XBUFF       ;SAVE
E0CA3C: A2 09       >248           LDX   #9         
E0CA3E: BD 2F C8    >249  :LOOP    LDA   DATABRK,X  ;BRK STACK INFO
E0CA41: 48          >250           PHA              ;ON SYSTEM STACK
E0CA42: CA          >251           DEX              
E0CA43: 10 F9 =CA3E >252           BPL   :LOOP      
                    >253  
E0CA45: AE 29 C8    >254           LDX   SLOTN0     
                    >255  ****************************************
                    >256  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >257  ****************************************
E0CA48: A9 62       >258           LDA   #%01100010 ;RAM6, ROM2
E0CA4A: 9D 88 C0    >259           STA   SEGMBASE,X 
                    >260  * Pull BRK info off system stack and put in BRK stack
E0CA4D: 68          >261           PLA              
E0CA4E: 99 C8 C9    >262           STA   BRKDATA,Y  
E0CA51: 68          >263           PLA              
E0CA52: 99 CE C8    >264           STA   BRKLOW,Y   
E0CA55: 68          >265           PLA              
E0CA56: 99 9C C8    >266           STA   BRKHI,Y    
E0CA59: 68          >267           PLA              
E0CA5A: 99 6A C8    >268           STA   BRKPBR,Y   
E0CA5D: 68          >269           PLA              
E0CA5E: 99 32 C9    >270           STA   BRKTGLOW,Y 
E0CA61: 99 96 C9    >271           STA   BRKPASLO,Y 
E0CA64: 68          >272           PLA              
E0CA65: 99 00 C9    >273           STA   BRKTGHI,Y  
E0CA68: 99 64 C9    >274           STA   BRKPASHI,Y 
                    >275  
E0CA6B: A3 04       >276           LDA   4,S        ; get BRK type
E0CA6D: C9 C3       >277           CMP   #"C"       ; is this Conditional BRK?
E0CA6F: D0 0B =CA7C >278           BNE   :NOcond    ; if no
E0CA71: 68          >279           PLA              ; skip LETTER6
E0CA72: 68          >280           PLA              ; get Conditional Symbol
E0CA73: 99 32 C9    >281           STA   BRKTGLOW,Y 
E0CA76: 68          >282           PLA              ; get Conditional Register
E0CA77: 99 00 C9    >283           STA   BRKTGHI,Y  
E0CA7A: 80 03 =CA7F >284           BRA   :GETtype   
                    >285  
E0CA7C: 68          >286  :NOcond  PLA              ; SKIP LETTER6
E0CA7D: 68          >287           PLA              ; SKIP LETTER7
E0CA7E: 68          >288           PLA              ; skip LETTER8
E0CA7F: 68          >289  :GETtype PLA              ; get BRK type
E0CA80: 99 38 C8    >290           STA   BRKTYPE,Y  
                    >291  
                    >292  ****************************************
                    >293  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >294  ****************************************
E0CA83: A9 02       >295           LDA   #%00000010 ;RAM0, ROM2
E0CA85: 9D 88 C0    >296           STA   SEGMBASE,X 
E0CA88: C8          >297           INY              
E0CA89: 8C F8 C8    >298           STY   POINT       ;UPDATE BRK STACK POINTER
E0CA8C: AE 49 C8    >299           LDX   XBUFF       ;RESTORE
E0CA8F: A9 00       >300           LDA   #0          ;SET Z BIT
E0CA91: 60          >301  PUTDONE  RTS              
                    >302  
                    >303  *-------------------------------------------------
                    >304  * Display the registers
                    >305  
E0CA92: 2C B9 C9    >306  DISREG2  BIT   STFLAG     ; is STep mode on?
E0CA95: 10 03 =CA9A >307           BPL   :doReg     ; if no
E0CA97: 4C 26 CB    >308           JMP   DoDisAsm   ; if yes skip register display
                    >309  
E0CA9A: A2 00       >310  :doReg   LDX   #0         
E0CA9C: A0 00       >311           LDY   #0         
E0CA9E: 20 28 CC    >312  NEXTREG  JSR   WRITREG     ;DISPLAY THE REGISTER LABEL
E0CAA1: BD 11 C8    >313           LDA   ACC,X      
E0CAA4: E0 0A       >314           CPX   #$A         ;IF ONE OF 1ST 5 THEN
E0CAA6: B0 0A =CAB2 >315           BGE   :ENDI      
E0CAA8: 48          >316           PHA              ;SAVE
E0CAA9: E8          >317           INX              
E0CAAA: BD 11 C8    >318           LDA   ACC,X       ;GET HI BYTE
E0CAAD: 20 C6 CF    >319           JSR   TRANSFR2   ;PRINT REG. CONTENTS
E0CAB0: 37          >320           DFB   PRBYTEC     ;CODE
E0CAB1: 68          >321           PLA              ;GET LO BYTE
E0CAB2: 20 C6 CF    >322  :ENDI    JSR   TRANSFR2   ;PRINT REG. CONTENTS
E0CAB5: 37          >323           DFB   PRBYTEC     ;CODE
E0CAB6: E8          >324           INX              
E0CAB7: E0 0E       >325           CPX   #$E         ;UNTIL STATUS PRINTED
E0CAB9: 90 E3 =CA9E >326           BLT   NEXTREG    
                    >327  
                    >328  * Display individual status flags
E0CABB: A9 BD       >329           LDA   #"="       
E0CABD: 20 1C CC    >330           JSR   COUT2       ;PRINT "="
E0CAC0: AD 1E C8    >331           LDA   STATUS     
E0CAC3: 2C 1B C9    >332           BIT   EMULATE     ;WHICH MODE ?
E0CAC6: 30 04 =CACC >333           BMI   :M6502      ;IF 6502
E0CAC8: A2 08       >334           LDX   #8          ;USE FLAGS16
E0CACA: 80 02 =CACE >335           BRA   :NEXTF     
E0CACC: A2 00       >336  :M6502   LDX   #0         
E0CACE: 0A          >337  :NEXTF   ASL              ;SHIFT N BIT INTO CARRY
E0CACF: 48          >338           PHA              ;SAVE A
E0CAD0: B0 04 =CAD6 >339           BCS   :FLGSET    
E0CAD2: A9 AD       >340           LDA   #"-"       
E0CAD4: D0 09 =CADF >341           BNE   :NOTFLG    
E0CAD6: CD 00 C8    >342  :FLGSET  CMP   $C800       ;DISABLE EXTRAM
E0CAD9: BD 30 C8    >343           LDA   FLAGS,X     ;LOAD LETTER OF FLAG FROM STRING NVEBDIZC
E0CADC: CD 00 CF    >344           CMP   $CF00       ;ENABLE EXT RAM
E0CADF: 20 1C CC    >345  :NOTFLG  JSR   COUT2       ;
E0CAE2: E8          >346           INX              
E0CAE3: 68          >347           PLA              ;RESTORE A
E0CAE4: E0 08       >348           CPX   #8          ;FINISHED YET?
E0CAE6: 90 E6 =CACE >349           BLT   :NEXTF      ;BLO IF NOT FINISHED
E0CAE8: F0 04 =CAEE >350           BEQ   :DOL        ;IF FINISHED
E0CAEA: E0 10       >351           CPX   #16         ;FINISHED WITH FLAGS16
E0CAEC: 90 E0 =CACE >352           BLT   :NEXTF      ;BLO IF NOT FINISHED
                    >353  
                    >354  * Print L flag. L=0 L/C not enabled, L=1 L/C bank1,
                    >355  * L=2 L/C bank2
                    >356  
E0CAEE: 20 28 CC    >357  :DOL     JSR   WRITREG     ;PRINT "L="
E0CAF1: A2 00       >358           LDX   #0         
E0CAF3: 2C 12 C0    >359           BIT   $C012       ;L/C OR ROM
E0CAF6: 10 07 =CAFF >360           BPL   LIS0        ;IF ROM
E0CAF8: 2C 11 C0    >361           BIT   $C011       ;BANK1 OR 2
E0CAFB: 10 01 =CAFE >362           BPL   LIS1        ;IF BANK1
E0CAFD: E8          >363           INX              ;BANK2
E0CAFE: E8          >364  LIS1     INX              
E0CAFF: 8A          >365  LIS0     TXA              
E0CB00: 20 C6 CF    >366           JSR   TRANSFR2   ;PRINT 0,1,OR 2
E0CB03: 47          >367           DFB   PRHEXC      ;CODE
                    >368  
                    >369  * Print E flag
E0CB04: 20 28 CC    >370           JSR   WRITREG     ;PRINT "E="
E0CB07: A9 B1       >371           LDA   #"1"       
E0CB09: 2C 1B C9    >372           BIT   EMULATE     ;816 MODE?
E0CB0C: 30 02 =CB10 >373           BMI   :NO         ;IF NO
E0CB0E: A9 B0       >374           LDA   #"0"       
E0CB10: 20 1C CC    >375  :NO      JSR   COUT2       ;DISPLAY 0 or 1
                    >376  
                    >377  * Print I flag
E0CB13: 20 28 CC    >378           JSR   WRITREG     ;PRINT "I="
E0CB16: A9 B0       >379           LDA   #"0"       
E0CB18: AE A5 C8    >380           LDX   Iflag      ; I flag set?
E0CB1B: F0 02 =CB1F >381           Beq   :noI        ;IF NO
E0CB1D: A9 B1       >382           LDA   #"1"       
E0CB1F: 20 1C CC    >383  :noI     JSR   COUT2       ;DISPLAY 0 or 1
                    >384  
E0CB22: 20 C6 CF    >385           JSR   TRANSFR2   ;CARRIAGE RETURN
E0CB25: 0F          >386           DFB   CROUTC      ;CODE
                    >387  
                    >388  * List one line of disassembled code
                    >389  
E0CB26: 20 C6 CF    >390  DoDisAsm JSR   TRANSFR2   
E0CB29: 23          >391           DFB   DISASMC     ;CODE
E0CB2A: 20 C6 CF    >392           JSR   TRANSFR2   ;CHECK FOR ACCESS TO NO ACCESS RANGE
E0CB2D: 35          >393           DFB   CKACCESC   ;code
                    >394  
                    >395  * Update FLAG, MEM, EFF & STK windows
E0CB2E: 20 C6 CF    >396           JSR   TRANSFR2   ;UPDATE FLAG,MEM,EFF,STACK WINDOWS
E0CB31: C7          >397           DFB   DISFMESC   ;code
E0CB32: 20 C6 CF    >398           JSR   TRANSFR2   
E0CB35: A6          >399           DFB   WINDDRC    
E0CB36: 60          >400           RTS              
                    >401  
                    >402  ******************************
                    >403  *  COMMAND MODE
                    >404  ******************************
                    >405  
            =E0CB37 >406  COMDMO   EQU   *          
                    >407  
                    >408  *--------------------
                    >409  * Set invisible mode
                    >410  
E0CB37: A0 00       >411           LDY   #0          ;init for write
E0CB39: 20 21 CC    >412           JSR   DISMODE     ;display 1st mode choice
E0CB3C: A9 B1       >413           LDA   #"1"        ;determine current setting
E0CB3E: 2C 22 C8    >414           BIT   INVISIBL   
E0CB41: D0 02 =CB45 >415           BNE   :INVMO     
E0CB43: A9 B2       >416           LDA   #"2"       
E0CB45: 20 2D CC    >417  :INVMO   JSR   GETCHOIC    ;get user's choice
E0CB48: F0 0A =CB54 >418           BEQ   :CPUTYP     ;if <CR> entered
                    >419  
E0CB4A: 8D 22 C8    >420           STA   INVISIBL    ;default to invisible on
E0CB4D: C9 B2       >421           CMP   #"2"        ;turn invisible off ?
E0CB4F: D0 03 =CB54 >422           BNE   :CPUTYP     ;if no
E0CB51: 9C 22 C8    >423           STZ   INVISIBL    ;invisible mode off
                    >424  
                    >425  *---------------------
                    >426  * Set CPU type
                    >427  
E0CB54: 20 21 CC    >428  :CPUTYP  JSR   DISMODE     ;display mode choice
E0CB57: A9 B3       >429           LDA   #"3"        ;determine current type
E0CB59: 2C 23 C8    >430           BIT   CMOSFLAG   
E0CB5C: 70 08 =CB66 >431           BVS   :TYPE       ;65816
E0CB5E: 30 04 =CB64 >432           BMI   :TYPC02     ;65C02
E0CB60: A9 B1       >433           LDA   #"1"        ;MUST BE 6502
E0CB62: 80 02 =CB66 >434           BRA   :TYPE      
E0CB64: A9 B2       >435  :TYPC02  LDA   #"2"       
E0CB66: 20 2D CC    >436  :TYPE    JSR   GETCHOIC   ;get user's choice
E0CB69: F0 11 =CB7C >437           BEQ   :TRCBRK     ;if <CR> entered
                    >438  
E0CB6B: A2 40       >439           LDX   #%01000000 ;default to 65816 mode
E0CB6D: C9 B1       >440           CMP   #"1"        ;6502 type ?
E0CB6F: D0 02 =CB73 >441           BNE   :CKC02      ;if no
E0CB71: A2 00       >442           LDX   #0          ;set 6502 mode
                    >443  
E0CB73: C9 B2       >444  :CKC02   CMP   #"2"        ;65C02 type ?
E0CB75: D0 02 =CB79 >445           BNE   :SETCPU     ;if no
E0CB77: A2 80       >446           LDX   #%10000000 ;set 65C02 mode
                    >447  
E0CB79: 8E 23 C8    >448  :SETCPU  STX   CMOSFLAG   ;set new CPU type
                    >449  
E0CB7C: 9C 93 C8    >450  :TRCBRK  STZ   RTBRKFLG   ;do not trace user breaks
                    >451  
                    >452  *----------------------
                    >453  * Set I/O
                    >454  
E0CB7F: 20 21 CC    >455  :IOTYP   JSR   DISMODE     ;display mode choice
E0CB82: A9 B2       >456           LDA   #"2"       
E0CB84: 2C 24 C8    >457           BIT   IOMODE      ;0=NORMAL, BIT7 1=SERIAL, BIT6 1=SLOT1
E0CB87: 30 06 =CB8F >458           BMI   :IOMOD      ;if serial
E0CB89: A9 B1       >459           LDA   #"1"       
E0CB8B: 70 02 =CB8F >460           BVS   :IOMOD      ;if printer
E0CB8D: A9 B3       >461           LDA   #"3"        ;if normal
E0CB8F: 20 2D CC    >462  :IOMOD   JSR   GETCHOIC   ;get user's choice
E0CB92: F0 2E =CBC2 >463           BEQ   MODONE      ;if <CR> entered
                    >464  
E0CB94: C9 B3       >465           CMP   #"3"        ;normal I/O ?
E0CB96: D0 0C =CBA4 >466           BNE   :CKSER      ;if no
E0CB98: 9C 24 C8    >467           STZ   IOMODE      ;screen output
E0CB9B: F4 00 CF    >468           PEA   COMDON-1   ;address of routine, display Main screen
E0CB9E: F4 00 00    >469           PEA   S_COMDON   ;segment of routine
E0CBA1: 4C B7 CF    >470           JMP   JUMPSEG2   ;transfer segments
                    >471  
E0CBA4: C9 B2       >472  :CKSER   CMP   #"2"       ;serial I/O ?
E0CBA6: D0 04 =CBAC >473           BNE   :CKPRINT   ;if no
E0CBA8: A9 80       >474           LDA   #$80       ;for IOMODE slot #2
E0CBAA: 80 06 =CBB2 >475           BRA   :SETIO     
                    >476  
E0CBAC: C9 B1       >477  :CKPRINT CMP   #"1"       ;output to slot #1 ?
E0CBAE: D0 12 =CBC2 >478           BNE   MODONE     ;if no
E0CBB0: A9 40       >479           LDA   #$40       ;if slot #1
E0CBB2: 8D 24 C8    >480  :SETIO   STA   IOMODE      ;$0=NORMAL, BIT7 1=SERIAL, BIT6 1=SLOT1
E0CBB5: 20 C6 CF    >481           JSR   TRANSFR2   ;init slot
E0CBB8: 5E          >482           DFB   INITPASCC  ;code
E0CBB9: F4 14 CF    >483           PEA   COMDOFF-1  ;address of routine, turn screen display off
E0CBBC: F4 00 00    >484           PEA   S_COMDOFF  ;segment of routine
E0CBBF: 4C B7 CF    >485           JMP   JUMPSEG2   ;transfer segments
                    >486  
E0CBC2: 20 C6 CF    >487  MODONE   JSR   TRANSFR2   ;display flag window
E0CBC5: A7          >488           DFB   DISFLGWC   ;code
E0CBC6: 20 C6 CF    >489           JSR   TRANSFR2   ;set to DR window
E0CBC9: A6          >490           DFB   WINDDRC    
E0CBCA: 80 11 =CBDD >491           BRA   GETCOM2    
                    >492  
                    >493  *---------------------------*
                    >494  *  Command ET
                    >495  *---------------------------*
                    >496  
            =E0CBCC >497  COMDET   EQU   *          
E0CBCC: F0 09 =CBD7 >498           BEQ   BPERR2     ;NO ADDRESS FOLLOWS
                    >499  
                    >500  * Execute the code from address to address and display the
                    >501  * number of clock cycles required.
                    >502  
E0CBCE: 20 9A CE    >503           JSR   CALCTIME   
E0CBD1: B0 04 =CBD7 >504           BCS   BPERR2     ;if the command was BAD
E0CBD3: 20 C6 CF    >505           JSR   TRANSFR2   ;EXECUTE USERS PROGRAM
E0CBD6: 18          >506           DFB   EXECUTEC   ;code (no return)
                    >507  
                    >508  *-------------------------------------------------
                    >509  *  Bad Parameter error & do GET COMmand
                    >510  
E0CBD7: A9 04       >511  BPERR2   LDA   #BADPAR     ;BAD PARAMETER ERROR NUMBER
E0CBD9: 20 C6 CF    >512           JSR   TRANSFR2   ;INDICATE ERROR
E0CBDC: 2D          >513           DFB   ERRBEEPC   ;code
                    >514  * fall thru to getcom2
                    >515  
                    >516  *----------------------------------------
                    >517  *  GETCOM2 - do <CR> & get user command
                    >518  
E0CBDD: F4 FF C9    >519  GETCOM2  PEA   GETCOMCR-1 ;address of command
E0CBE0: F4 00 05    >520           PEA   S_GETCOM   ;segment of command
E0CBE3: 4C B7 CF    >521           JMP   JUMPSEG2   ;goto command
                    >522  
                    >523  *--------------------------------
                    >524  * STA AT (PC,Y)
                    >525  
E0CBE6: 48          >526  STAPCIY  PHA              
E0CBE7: AD 21 C8    >527           LDA   PBR        
E0CBEA: 8D 3C C8    >528           STA   DBRDDT     
E0CBED:             >529           memory16         
E0CBED: C2 20       >529           REP   #$20       
                    >529           <<<              
E0CBEF: AD 1F C8    >530           LDA   PCLO       
E0CBF2: 8D 18 C9    >531           STA   LOWADD     
E0CBF5:             >532           memory8          
E0CBF5: E2 20       >532           SEP   #$20       
                    >532           <<<              
E0CBF7: 68          >533           PLA              
E0CBF8: 20 C6 CF    >534           JSR   TRANSFR2   ;STA (LOWADD,Y)
E0CBFB: 08          >535           DFB   STAINDYC   ;code
E0CBFC: 60          >536           RTS              
                    >537  
                    >538  
                    >539  *---------------------------------
                    >540  * Write text to the display device
                    >541  * The address of the text is on the stack
                    >542  * Positive numbers are RLE compressed spaces
                    >543  * At end of message C=1 and Acc = last character displayed
                    >544  
                    >545  * THIS ROUTINE MUST BE ABOVE $CF00
                    >546  
E0CBFD: 8C 47 C8    >547  WRITE2   STY   YBUFF       ;SAVE
E0CC00: A0 00       >548           LDY   #0         
                    >549  WRITLOP2                  
E0CC02: CD 00 C8    >550           CMP   $C800      ;disable DDT RAM
E0CC05: B3 03       >551           LDA   (3,S),Y    ;get character to display
E0CC07: CD 00 CF    >552           CMP   $CF00      ;enable DDT RAM
E0CC0A: C8          >553           INY              ;next character
E0CC0B: C9 84       >554           CMP   #EOT       ;finished?
E0CC0D: F0 05 =CC14 >555           BEQ   WRDONE2    ;if yes
                    >556  
E0CC0F: 20 1C CC    >557  WRITACC2 JSR   COUT2      ;display character
E0CC12: 80 EE =CC02 >558           BRA   WRITLOP2   ;loop until done
                    >559  
E0CC14:             >560  WRDONE2  MEMORY16         
E0CC14: C2 20       >560           REP   #$20       
                    >560           <<<              
E0CC16: 68          >561           PLA              ;get return address
E0CC17: 83 01       >562           STA   1,S         ;free parameter space
E0CC19:             >563           MEMORY8          
E0CC19: E2 20       >563           SEP   #$20       
                    >563           <<<              
E0CC1B: 60          >564           RTS              
                    >565  
E0CC1C: 20 C6 CF    >566  COUT2    JSR   TRANSFR2   ;display on output device
E0CC1F: 07          >567           DFB   COUTC       ;code
E0CC20: 60          >568           RTS              
                    >569  
                    >570  *--------------------------------
                    >571  * Display part of the mode choice menu
                    >572  
E0CC21: F4 E2 C8    >573  DISMODE  PEA   MSGMODE    ;address of message
E0CC24: 20 02 CC    >574  DOWRLOP2 JSR   WRITLOP2   ;write from current Y pointer
E0CC27: 60          >575           RTS              
                    >576  
                    >577  *-------------------------------------------------
                    >578  * Display the register message pointed to by Y
                    >579  * NOTE ALL REGISTER MESSAGES MUST BE CONSECUTIVE
                    >580  
E0CC28: F4 00 C8    >581  WRITREG  PEA   MSGREGA    ;address of message
E0CC2B: 80 F7 =CC24 >582           BRA   DOWRLOP2   
                    >583  
                    >584  *---------------------
                    >585  * Get user choice, display 'Enter <n> : '
                    >586  
                    >587  GETCHOIC                  
E0CC2D: 5A          >588           PHY              ;save mode menu pointer
E0CC2E: 48          >589           PHA              ;save default number
E0CC2F: F4 5F C9    >590           PEA   MSGENTER   
E0CC32: 20 FD CB    >591           JSR   WRITE2     ;display "Enter <"
E0CC35: 68          >592           PLA              ;restore default
E0CC36: F4 5F C9    >593           PEA   MSGENTER   ;2nd part of message "> :"
E0CC39: 20 0F CC    >594           JSR   WRITACC2   ;display ACC then rest of message
                    >595  
                    >596  * Get mode input
                    >597  
E0CC3C: A9 A0       >598           LDA   #$A0        ;SPACE
E0CC3E: 8D FA C8    >599           STA   PROMPT      ;NEW PROMPT
E0CC41: 20 C6 CF    >600           JSR   TRANSFR2   ;GET INPUT
E0CC44: 57          >601           DFB   GETLNC      ;CODE
E0CC45: B0 0B =CC52 >602           BCS   :ESC        ;if "esc" key
E0CC47: E8          >603           INX              
E0CC48: A0 00       >604           LDY   #00        
E0CC4A: 20 C6 CF    >605           JSR   TRANSFR2   ;GET 1ST CHAR
E0CC4D: 01          >606           DFB   GETCHRC     ;CODE
                    >607  
E0CC4E: 7A          >608           PLY              ;restore mode menu pointer
E0CC4F: C9 8D       >609           CMP   #CR         ;set z bit if <CR> entered
E0CC51: 60          >610           RTS              
                    >611  
                    >612  * If "esc" key pressed
E0CC52: 7A          >613  :ESC     PLY              ;get Y off stack
E0CC53: 68          >614           PLA              
E0CC54: 68          >615           PLA              ;pull return address off stack
E0CC55: 4C C2 CB    >616           JMP   MODONE      ;exit MOde command
                    >617  
                    >618  *---------------------------------
                    >619  * Move routines from ROM to RAM
                    >620  * !!!!! NOTE Stack can NOT be in DDT RAM !!!!!
                    >621  
E0CC58: AD 29 C8    >622  ROMTORAM LDA   SLOTN0     
E0CC5B: AA          >623           TAX              ;used in XFRIO
E0CC5C: 09 80       >624           ORA   #$80       
E0CC5E: 48          >625           PHA              ;push parameters for XFRIO
E0CC5F: AD 28 C8    >626           LDA   SLOTCN     
E0CC62: 48          >627           PHA              
                    >628  
E0CC63: CD 00 C8    >629           CMP   $C800       ;disable DDT RAM read
E0CC66: 20 7C C8    >630           JSR   XFRIO       ;transfer routines to IO space
                    >631  * DDT RAM enabled before returning
E0CC69: 68          >632           PLA              
E0CC6A: 68          >633           PLA              ;clean up stack
                    >634  
E0CC6B: 60          >635           RTS              
                    >636  
                    >637  *----------------------------------------
                    >638  * Replace the breakpoint in the program with the original instruction.
                    >639  * Remove the address from the breaks buffer, and reorganize the list.
                    >640  * Enter with Y pointing to breakpoint.
                    >641  
E0CC6C: 98          >642  REPLACE  TYA              
E0CC6D: AA          >643           TAX              ;POINTS AT BRK TO REPLACE
E0CC6E: AC 29 C8    >644           LDY   SLOTN0     
E0CC71: AD F8 C8    >645           LDA   POINT       ;BRK STACK POINTER
E0CC74: 48          >646           PHA              ;PULLED IN SORTBRK
                    >647  ****************************************
                    >648  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >649  ****************************************
E0CC75: A9 62       >650           LDA   #%01100010 ;RAM6, ROM2
E0CC77: 99 88 C0    >651           STA   SEGMBASE,Y 
                    >652  
E0CC7A: BD 38 C8    >653           LDA   BRKTYPE,X  
E0CC7D: 8D 13 C8    >654           STA   ACC+2       ;SAVE IN RAM6
E0CC80: C9 C9       >655           CMP   #"I"        ;IMPLIED BRK ?
E0CC82: F0 33 =CCB7 >656           BEQ   SORTBRK     ;IF YES, STAY RAM6, ROM2
E0CC84: BD C8 C9    >657           LDA   BRKDATA,X  ;GET ORIGINAL DATA
E0CC87: 48          >658           PHA              
E0CC88: BD 6A C8    >659           LDA   BRKPBR,X   
E0CC8B: 48          >660           PHA              
E0CC8C: BD 9C C8    >661           LDA   BRKHI,X    
E0CC8F: 48          >662           PHA              
E0CC90: BD CE C8    >663           LDA   BRKLOW,X   
E0CC93: 48          >664           PHA              
                    >665  ****************************************
                    >666  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >667  ****************************************
E0CC94: A9 02       >668           LDA   #%00000010 ;RAM0 ROM2
E0CC96: 99 88 C0    >669           STA   SEGMBASE,Y 
E0CC99: 68          >670           PLA              
E0CC9A: 8D 18 C9    >671           STA   LOWADD     
E0CC9D: 68          >672           PLA              
E0CC9E: 8D 19 C9    >673           STA   HIADD      
E0CCA1: 68          >674           PLA              
E0CCA2: 8D 3C C8    >675           STA   DBRDDT     
E0CCA5: 68          >676           PLA              ;DATA
E0CCA6: A0 00       >677           LDY   #0         
E0CCA8: 20 C6 CF    >678           JSR   TRANSFR2   ;REPLACE BRK WITH ORIG. DATA
E0CCAB: 08          >679           DFB   STAINDYC   ;code
E0CCAC: CE F7 C8    >680           DEC   REALBRK     ;DECREMENT REAL BRK COUNT
E0CCAF: AC 29 C8    >681           LDY   SLOTN0     
                    >682  ****************************************
                    >683  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >684  ****************************************
E0CCB2: A9 62       >685           LDA   #%01100010 ;RAM6, ROM2
E0CCB4: 99 88 C0    >686           STA   SEGMBASE,Y 
                    >687  
                    >688  * Sort the BRK stack, shift up data to fill gap
E0CCB7: 8C 12 C8    >689  SORTBRK  STY   ACC+1       ;SAVE SLOTN0
E0CCBA: 68          >690           PLA              ;GET BRK STACK POINTER
E0CCBB: 8D 11 C8    >691           STA   ACC         ;SAVE IN SEG6
                    >692  
                    >693  * Save the BRK info incase we are tracing this break
E0CCBE: BD 6A C8    >694           LDA   BRKPBR,X   
E0CCC1: 48          >695           PHA              
E0CCC2: BD 9C C8    >696           LDA   BRKHI,X    
E0CCC5: 48          >697           PHA              
E0CCC6: BD CE C8    >698           LDA   BRKLOW,X   
E0CCC9: 48          >699           PHA              
E0CCCA: BD 00 C9    >700           LDA   BRKTGHI,X  
E0CCCD: 48          >701           PHA              
E0CCCE: BD 32 C9    >702           LDA   BRKTGLOW,X 
E0CCD1: 48          >703           PHA              
E0CCD2: BD 64 C9    >704           LDA   BRKPASHI,X 
E0CCD5: 48          >705           PHA              
E0CCD6: BD 96 C9    >706           LDA   BRKPASLO,X 
E0CCD9: 48          >707           PHA              
E0CCDA: BD C8 C9    >708           LDA   BRKDATA,X  
E0CCDD: 48          >709           PHA              
                    >710  
E0CCDE: 8A          >711  :NEXT    TXA              
E0CCDF: A8          >712           TAY              ;CURRENT BRK Y
E0CCE0: E8          >713           INX              ;NEXT BRK X
E0CCE1: EC 11 C8    >714           CPX   ACC         ;END OF DATA ON STACK ?
E0CCE4: F0 39 =CD1F >715           BEQ   :SORTEND   ;IF YES
E0CCE6: BD 38 C8    >716           LDA   BRKTYPE,X  ;SHIFT ALL DATA UP
E0CCE9: 99 38 C8    >717           STA   BRKTYPE,Y  
E0CCEC: BD 6A C8    >718           LDA   BRKPBR,X   
E0CCEF: 99 6A C8    >719           STA   BRKPBR,Y   
E0CCF2: BD 9C C8    >720           LDA   BRKHI,X    
E0CCF5: 99 9C C8    >721           STA   BRKHI,Y    
E0CCF8: BD CE C8    >722           LDA   BRKLOW,X   
E0CCFB: 99 CE C8    >723           STA   BRKLOW,Y   
E0CCFE: BD 00 C9    >724           LDA   BRKTGHI,X  
E0CD01: 99 00 C9    >725           STA   BRKTGHI,Y  
E0CD04: BD 32 C9    >726           LDA   BRKTGLOW,X 
E0CD07: 99 32 C9    >727           STA   BRKTGLOW,Y 
E0CD0A: BD 64 C9    >728           LDA   BRKPASHI,X 
E0CD0D: 99 64 C9    >729           STA   BRKPASHI,Y 
E0CD10: BD 96 C9    >730           LDA   BRKPASLO,X 
E0CD13: 99 96 C9    >731           STA   BRKPASLO,Y 
E0CD16: BD C8 C9    >732           LDA   BRKDATA,X  
E0CD19: 99 C8 C9    >733           STA   BRKDATA,Y  
E0CD1C: 4C DE CC    >734           JMP   :NEXT      
                    >735  :SORTEND                  
                    >736  
                    >737  *-------------------------------------------------
                    >738  * Put the info from the BRK just replaced above the current BRK stack point.
                    >739  * To put the BRK back in simply increment the break stack pointer by 1.
                    >740  
E0CD1F: 68          >741           PLA              
E0CD20: 99 C8 C9    >742           STA   BRKDATA,Y  
E0CD23: 68          >743           PLA              
E0CD24: 99 96 C9    >744           STA   BRKPASLO,Y 
E0CD27: 68          >745           PLA              
E0CD28: 99 64 C9    >746           STA   BRKPASHI,Y 
E0CD2B: 68          >747           PLA              
E0CD2C: 99 32 C9    >748           STA   BRKTGLOW,Y 
E0CD2F: 68          >749           PLA              
E0CD30: 99 00 C9    >750           STA   BRKTGHI,Y  
E0CD33: 68          >751           PLA              
E0CD34: 99 CE C8    >752           STA   BRKLOW,Y   
E0CD37: 68          >753           PLA              
E0CD38: 99 9C C8    >754           STA   BRKHI,Y    
E0CD3B: 68          >755           PLA              
E0CD3C: 99 6A C8    >756           STA   BRKPBR,Y   
E0CD3F: AD 13 C8    >757           LDA   ACC+2       ;BRKTYPE
E0CD42: 99 38 C8    >758           STA   BRKTYPE,Y  
E0CD45: 48          >759           PHA              
                    >760  
E0CD46: AE 12 C8    >761           LDX   ACC+1       ;SLOTN0
                    >762  ****************************************
                    >763  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >764  ****************************************
E0CD49: A9 02       >765           LDA   #%00000010 ;RAM0, ROM2
E0CD4B: 9D 88 C0    >766           STA   SEGMBASE,X 
E0CD4E: 8C F8 C8    >767           STY   POINT       ;NEW BRK STACK POINTER
E0CD51: 68          >768           PLA              ;TYPE OF BRK REMOVED
E0CD52: 60          >769           RTS              
                    >770  
                    >771  ***********************************
                    >772  * Decrement TOGO if valid break
                    >773  * TOGOFLG = 0 if TOGO = 0
                    >774  ***********************************
                    >775  
                    >776  * Use current PC
                    >777  
E0CD53: 20 70 CE    >778  DECTGPC  JSR   PC2LETR     ;LOAD LETTER 3,2,1 WITH PC
                    >779  
E0CD56: A9 00       >780  DECTOGO  LDA   #0          ;DEC TOGO FLAG
E0CD58: F0 05 =CD5F >781           BEQ   VALID2     
                    >782  
                    >783  ***********************************
                    >784  * Check if address is valid breakpoint on list.
                    >785  * Returns with:
                    >786  *   N=1 IF INVALID
                    >787  *   Z=1 & V=0 IF VALID and Real BRK
                    >788  *   Z=0 & V=0 if VALID and Implied BRK
                    >789  *   Z=1 & V=1 if VALID and Conditional BRK
                    >790  * LETTER 3,2,1 must contain the instruction address
                    >791  ***********************************
                    >792  
                    >793  * Use current PC
                    >794  
E0CD5A: 20 70 CE    >795  VALIDPC  JSR   PC2LETR     ;LOAD LETTER 3,2,1 WITH PC
                    >796  
E0CD5D: A9 80       >797  VALIDAD  LDA   #$80        ;DON'T DEC TOGO
E0CD5F: 48          >798  VALID2   PHA              ;SAVE TOGO FLAG
E0CD60: A9 80       >799           LDA   #$80       
E0CD62: 8D 0D C9    >800           STA   TOGOFLG     ;RESET TOGO FLAG
E0CD65: 8C 47 C8    >801           STY   YBUFF       ;SAVE Y
E0CD68: 8E 49 C8    >802           STX   XBUFF       ;SAVE X
E0CD6B: AC F8 C8    >803           LDY   POINT       ;GET BREAKS POINTER
E0CD6E: 88          >804           DEY              ;ARE THERE ANY BREAKS ?
E0CD6F: 10 03 =CD74 >805           BPL   :BRKS       ;IF YES
E0CD71: 68          >806           PLA              ;CLEAN UP STACK
E0CD72: 98          >807           TYA              ;SET STATUS FLAGS
E0CD73: 60          >808           RTS              ;IF NO
                    >809  
E0CD74: C8          >810  :BRKS    INY              
E0CD75: AD 32 C8    >811           LDA   LETTER3     ;PBR OF BRK ADDRESS
E0CD78: 48          >812           PHA              
E0CD79: AD 31 C8    >813           LDA   LETTER2     ;HI BYTE
E0CD7C: 48          >814           PHA              
E0CD7D: AD 30 C8    >815           LDA   LETTER1     ;LOW BYTE
E0CD80: 48          >816           PHA              
E0CD81: AE 29 C8    >817           LDX   SLOTN0     
                    >818  
                    >819  ****************************************
                    >820  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >821  ****************************************
                    >822  
E0CD84: A9 62       >823           LDA   #%01100010 ;RAM6, ROM2
E0CD86: 9D 88 C0    >824           STA   SEGMBASE,X 
E0CD89: 68          >825           PLA              
E0CD8A: 8D 13 C8    >826           STA   ACC+2       ;STORE IN RAM SEG6
E0CD8D: 68          >827           PLA              
E0CD8E: 8D 12 C8    >828           STA   ACC+1      
E0CD91: 68          >829           PLA              
E0CD92: 8D 11 C8    >830           STA   ACC        
E0CD95: 68          >831           PLA              ;GET DEC TOGO FLAG
E0CD96: 8D 14 C8    >832           STA   ACC+3      
E0CD99: A9 80       >833           LDA   #$80       
E0CD9B: 8D 15 C8    >834           STA   ACC+4       ;USE THIS AS TOGOFLG
E0CD9E: B8          >835           CLV              ; preset V=0 to non conditional break
E0CD9F: 88          >836  :LOOPLO  DEY              
E0CDA0: 30 65 =CE07 >837           BMI   :LEAVE      ;INVALID N=1
E0CDA2: AD 13 C8    >838           LDA   ACC+2       ;LOW BYTE
E0CDA5: D9 CE C8    >839           CMP   BRKLOW,Y   ;MATCH ?
E0CDA8: D0 F5 =CD9F >840           BNE   :LOOPLO     ;IF NO
                    >841  
E0CDAA: AD 12 C8    >842           LDA   ACC+1       ;HI BYTE
E0CDAD: D9 9C C8    >843           CMP   BRKHI,Y     ;HI BYTES MATCH ?
E0CDB0: D0 ED =CD9F >844           BNE   :LOOPLO     ;IF NO
                    >845  
E0CDB2: AD 11 C8    >846           LDA   ACC         ;PBR BYTE
E0CDB5: D9 6A C8    >847           CMP   BRKPBR,Y   ;MATCH ?
E0CDB8: D0 E5 =CD9F >848           BNE   :LOOPLO     ;IF NO, IF VALID FALL THROUGH
                    >849  
E0CDBA: A9 C3       >850           LDA   #"C"       
E0CDBC: D9 38 C8    >851           CMP   BRKTYPE,Y  ; was this a conditional break?
E0CDBF: F0 34 =CDF5 >852           BEQ   :CONDbrk   ; if yes
                    >853  
E0CDC1: AD 14 C8    >854           LDA   ACC+3       ;DEC TOGO ?
E0CDC4: 30 27 =CDED >855           BMI   :CKREAL     ;IF NO
                    >856  
                    >857  * Decrement TOGO count
                    >858  
E0CDC6: 38          >859           SEC              
E0CDC7: B9 32 C9    >860           LDA   BRKTGLOW,Y 
E0CDCA: E9 01       >861           SBC   #1         
E0CDCC: 99 32 C9    >862           STA   BRKTGLOW,Y 
E0CDCF: B9 00 C9    >863           LDA   BRKTGHI,Y  
E0CDD2: E9 00       >864           SBC   #0         
E0CDD4: 99 00 C9    >865           STA   BRKTGHI,Y  
                    >866  
                    >867  * Does TOGO = 0 ?
E0CDD7: D0 14 =CDED >868           BNE   :CKREAL     ;TOGO NOT 0
E0CDD9: B9 32 C9    >869           LDA   BRKTGLOW,Y 
E0CDDC: D0 0F =CDED >870           BNE   :CKREAL     ;TOGO NOT 0
                    >871  
                    >872  * ACC = 0
E0CDDE: 8D 15 C8    >873           STA   ACC+4       ;TOGO = 0
                    >874  
E0CDE1: B9 64 C9    >875           LDA   BRKPASHI,Y 
E0CDE4: 99 00 C9    >876           STA   BRKTGHI,Y  ;RESET TOGO
E0CDE7: B9 96 C9    >877           LDA   BRKPASLO,Y 
E0CDEA: 99 32 C9    >878           STA   BRKTGLOW,Y 
                    >879  
                    >880  
E0CDED: A9 D2       >881  :CKREAL  LDA   #"R"       
E0CDEF: B8          >882           CLV              ; set V=0 for non conditional break
E0CDF0: D9 38 C8    >883           CMP   BRKTYPE,Y  ;Z=1 IF REAL BRK
E0CDF3: 80 12 =CE07 >884           BRA   :LEAVE     
                    >885  
                    >886  * Conditional break
E0CDF5: B9 00 C9    >887  :CONDBRK LDA   BRKTGHI,Y  ; register offset of conditional break
E0CDF8: 48          >888           PHA              
E0CDF9: B9 32 C9    >889           LDA   BRKTGLOW,Y ; condition offset of conditional break
E0CDFC: 48          >890           PHA              
E0CDFD: B9 64 C9    >891           LDA   BRKPASHI,Y ; hi byte of conditional compare
E0CE00: 48          >892           PHA              
E0CE01: B9 96 C9    >893           LDA   BRKPASLO,Y ; low byte of conditional compare
E0CE04: 48          >894           PHA              
E0CE05: E2 40       >895           SEP   #$40       ; set V=1 to indicate conditional break
                    >896  
E0CE07: 08          >897  :LEAVE   PHP              ;SAVE FLAGS
E0CE08: AD 15 C8    >898           LDA   ACC+4       ;TOGO FLAG
E0CE0B: 48          >899           PHA              
                    >900  
                    >901  ****************************************
                    >902  * !!! ALERT !!! SEGMENT DEPENDENT CODE *
                    >903  ****************************************
                    >904  
E0CE0C: A9 02       >905           LDA   #%00000010 ;RAM0, ROM2
E0CE0E: 9D 88 C0    >906           STA   SEGMBASE,X 
                    >907  
E0CE11: 68          >908           PLA              ;GET TOGO FLAG
E0CE12: 8D 0D C9    >909           STA   TOGOFLG     ;SET FLAG
E0CE15: AE 49 C8    >910           LDX   XBUFF       ;RESTORE X
E0CE18: 28          >911           PLP              ;RESTORE FLAGS
                    >912  * ON VALID RETURN Y IS POINTING TO ADDRESS IN BREAKS BUFFER.
E0CE19: 70 01 =CE1C >913           BVS   :CHKCOND   ; if a conditional break
E0CE1B: 60          >914           RTS              
                    >915  
                    >916  * Check the conditions of the break
E0CE1C:             >917  :CHKCOND MEMORY16         
E0CE1C: C2 20       >917           REP   #$20       
                    >917           <<<              
E0CE1E: 68          >918           PLA              ;get conditional compare value
E0CE1F: 8D A1 C9    >919           STA   TEMP       
E0CE22: 68          >920           PLA              ;get register offset, condition offset
E0CE23: 8D A3 C9    >921           STA   TEMP+2     
E0CE26: AE A4 C9    >922           LDX   TEMP+3     ;register offset
E0CE29: 29 FF 00    >923           AND   #$00FF     
E0CE2C: 18          >924           CLC              
E0CE2D: 69 48 CE    >925           ADC   #CONDBRKS  ;address of proper branch sequence
E0CE30: 8D A3 C9    >926           STA   TEMP+2     
E0CE33:             >927           MX8              
E0CE33: E2 30       >927           SEP   #$30       
                    >927           <<<              
E0CE35: E0 0A       >928           CPX   #$A        ;byte or word compare?
E0CE37: B0 02 =CE3B >929           BGE   :BYTECMP   ;if byte
E0CE39:             >930           MEMORY16         ;do word compare
E0CE39: C2 20       >930           REP   #$20       
                    >930           <<<              
E0CE3B: BD 11 C8    >931  :BYTECMP LDA   ACC,X      ;get proper register value
E0CE3E: CD A1 C9    >932           CMP   TEMP       ;compare to conditional value
E0CE41:             >933           MEMORY8          
E0CE41: E2 20       >933           SEP   #$20       
                    >933           <<<              
E0CE43: E2 40       >934           SEP   #$40       ; force V=1 to indicate Conditional break
E0CE45: 6C A3 C9    >935           JMP   (TEMP+2)   ;go to proper branch sequence
                    >936  
                    >937           mx    %11        
                    >938  
                    >939  CONDBRKS                  
E0CE48: F0 20 =CE6A >940  condEQ   beq   dobrk      
E0CE4A: 80 16 =CE62 >941           bra   nobrk      
                    >942  
E0CE4C: 90 1C =CE6A >943  condLT   blt   dobrk      
E0CE4E: 80 12 =CE62 >944           bra   nobrk      
                    >945  
E0CE50: B0 18 =CE6A >946  condGE   bge   dobrk      
E0CE52: 80 0E =CE62 >947           bra   nobrk      
                    >948  
E0CE54: D0 14 =CE6A >949  condNE   bne   dobrk      
E0CE56: 80 0A =CE62 >950           bra   nobrk      
                    >951  
E0CE58: 90 08 =CE62 >952  condGT   blt   nobrk      
E0CE5A: D0 0E =CE6A >953           bne   dobrk      
E0CE5C: 80 04 =CE62 >954           bra   nobrk      
                    >955  
E0CE5E: 90 0A =CE6A >956  condLE   blt   dobrk      
E0CE60: F0 08 =CE6A >957           beq   dobrk      ;falls through to nobrk
                    >958  
E0CE62: A9 40       >959  nobrk    lda   #$40       
E0CE64: 8D 0D C9    >960           sta   TOGOflg    ;set flag to continue program
E0CE67: A9 00       >961           lda   #0         ;force N=0 & Z=1 to indicate valid BRK
E0CE69: 60          >962           rts              
                    >963  
E0CE6A: A9 00       >964  dobrk    lda   #0         ;force N=0 & Z=1 to indicate valid BRK
E0CE6C: 8D 0D C9    >965           sta   TOGOflg    ;set flag to halt program
E0CE6F: 60          >966           rts              
                    >967  
                    >968  
                    >969  * Put current PC into LETTER 3,2,1
                    >970  
E0CE70: AD 21 C8    >971  PC2LETR  LDA   PBR        
E0CE73: 8D 32 C8    >972           STA   LETTER3    
E0CE76: AD 20 C8    >973           LDA   PCHI       
E0CE79: 8D 31 C8    >974           STA   LETTER2    
E0CE7C: AD 1F C8    >975           LDA   PCLO       
E0CE7F: 8D 30 C8    >976           STA   LETTER1    
E0CE82: 60          >977           RTS              
                    >978  
                    >979  *-------------------------------------------------
                    >980  * Setup VIA for Trace if enabled
                    >981  
E0CE83: 20 FB CE    >982  TRSETVIA JSR   SAVEVIAR   ;save current VIA registers
E0CE86: AD 17 C8    >983           LDA   STACK      
E0CE89: 8D 01 C8    >984           STA   VIAORA     ;low byte of compare
E0CE8C: AD 18 C8    >985           LDA   STACK+1    
E0CE8F: 8D 10 C8    >986           STA   VIAORB     ;hi byte of compare
E0CE92: A9 90       >987           LDA   #%10010000 
E0CE94: 0C 43 C8    >988           TSB   IERBUFF    ;enable hardware break for Trace
E0CE97: 4C EA CE    >989           JMP   SETETVEC   ;set vector to goto after NMI, share ET vector
                    >990  
                    >991  *--------------- CALCTIME --------------*
                    >992  
E0CE9A: 20 FB CE    >993  CALCTIME JSR   SAVEVIAR   ;save current VIA registers
E0CE9D: 20 C6 CF    >994           JSR   TRANSFR2   ;read in 2 addresses
E0CEA0: 09          >995           DFB   CHKREADC   ;code
E0CEA1: B0 53 =CEF6 >996           BCS   ETERR      ;IF ERROR
E0CEA3: 2C 7E C8    >997           BIT   ADDRS2F    ;2 ADDRESSES ENTERED ?
E0CEA6: 10 4E =CEF6 >998           BPL   ETERR      ;IF NO
E0CEA8: 8D 1F C8    >999           STA   PCLO       ;LOW BYTE OF 1ST ADDRESS
E0CEAB: AD 31 C8    >1000          LDA   LETTER2    ;HI BYTE OF 1ST ADDRESS
E0CEAE: 8D 20 C8    >1001          STA   PCHI       ;REPLACE PC
E0CEB1: AD 33 C8    >1002          LDA   LETTER4    ;LOW BYTE OF 2ND ADDRESS
E0CEB4: 8D 01 C8    >1003          STA   VIAORA     
E0CEB7: AD 34 C8    >1004          LDA   LETTER5    ;HI BYTE OF 2ND ADDRESS
E0CEBA: 8D 10 C8    >1005          STA   VIAORB     ;REPLACE HARD BREAK
E0CEBD: A9 90       >1006          LDA   #%10010000 
E0CEBF: 8D 43 C8    >1007          STA   IERBUFF    ;ENABLE HARD BREAK
E0CEC2: 8D A3 C8    >1008          STA   ETFLAG     ;SET FLAG FOR NMIVEC ROUTINE
                    >1009 
E0CEC5: AD 0B C8    >1010          LDA   VIAACR     
E0CEC8: 29 DF       >1011          AND   #%11011111 ;SET T2 FOR TIMED INTERRUPT MODE
E0CECA: 8D 0B C8    >1012          STA   VIAACR     
                    >1013 
                    >1014 *********** COUNTER PRESET ************
                    >1015 * Bigger number makes ET smaller
                    >1016 
E0CECD: 18          >1017          CLC              ; if E=0 add 1
E0CECE: A9 82       >1018          LDA   #$82       ; default to fast count
E0CED0: 2C 36 C0    >1019          BIT   $C036      ; fast mode?
E0CED3: 30 03 =CED8 >1020          BMI   :CHECKE    ; if yes
E0CED5: 38          >1021          SEC              ; if E=0 add 2
E0CED6: A9 8B       >1022          LDA   #$8B       ; slow count
                    >1023 
E0CED8: 2C 1B C9    >1024 :CHECKE  BIT   EMULATE    ; native mode ?
E0CEDB: 30 02 =CEDF >1025          BMI   :EMULCNT   ; if no
E0CEDD: 69 01       >1026          ADC   #1         ; add 1+C if native mode
                    >1027 
E0CEDF: A2 C7       >1028 :EMULCNT LDX   #$C7       
E0CEE1: EC 28 C8    >1029          CPX   SLOTCN     ;are we in slot #7?
E0CEE4: D0 01 =CEE7 >1030          BNE   :NOT7      ;if not
E0CEE6: 1A          >1031          INC              ;if yes allow an extra cycle
E0CEE7: 8D 08 C8    >1032 :NOT7    STA   VIAT2CL    ;COUNTER PRESET
E0CEEA: A9 3A       >1033 SETETVEC LDA   #ETVECTOR  
E0CEEC: 8D 44 C8    >1034          STA   ENABLTVC   
E0CEEF: A9 CA       >1035          LDA   #>ETVECTOR ;SET UP NMI VECTOR
E0CEF1: 8D 45 C8    >1036          STA   ENABLTVC+1 
E0CEF4: 18          >1037          CLC              
E0CEF5: 60          >1038 ETRTS    RTS              
                    >1039 
E0CEF6: 20 4C CF    >1040 ETERR    JSR   ETRESTOR   ;RESTORE PC & VIA
E0CEF9: 38          >1041          SEC              
E0CEFA: 60          >1042          RTS              ;USE CARRY BIT AS AN ERROR FLAG
                    >1043 
E0CEFB: 48          >1044 SAVEVIAR PHA              ;SAVE CHARACTER
E0CEFC:             >1045          MEMORY16         
E0CEFC: C2 20       >1045          REP   #$20       
                    >1045          <<<              
E0CEFE: AD 1F C8    >1046          LDA   PCLO       
E0CF01: 8D 72 C8    >1047          STA   ETPCLO     ;SAVE PC
E0CF04:             >1048          MEMORY8          
E0CF04: E2 20       >1048          SEP   #$20       
                    >1048          <<<              
E0CF06: AD 43 C8    >1049          LDA   IERBUFF    
E0CF09: 8D 6F C8    >1050          STA   ETIERSAV   ;SAVE VIAIER
E0CF0C: AD 01 C8    >1051          LDA   VIAORA     
E0CF0F: 8D 70 C8    >1052          STA   ETORASAV   ;SAVE ORA & ORB
E0CF12: AD 10 C8    >1053          LDA   VIAORB     
E0CF15: 8D 71 C8    >1054          STA   ETORBSAV   
E0CF18: 68          >1055          PLA              ;GET CHARACTER
E0CF19: 60          >1056          RTS              
                    >1057 
                    >1058 *-------------------------------------------------
                    >1059 * Continuation of ETvector
                    >1060 * "ET" & "Trace" both come here
                    >1061 
E0CF1A: 2C A8 C8    >1062 ETVCONT  BIT   TRACFLAG   ;was NMI caused by Trace?
E0CF1D: 30 39 =CF58 >1063          BMI   TRRESTOR   ;if yes
E0CF1F: AD 09 C8    >1064          LDA   VIAT2CH    ;GET COUNTER VALUE
E0CF22: 49 FF       >1065          EOR   #$FF       ;ONES COMPLIMENT
E0CF24: 48          >1066          PHA              
E0CF25: AD 08 C8    >1067          LDA   VIAT2CL    
E0CF28: 49 FF       >1068          EOR   #$FF       ;ONES COMPLIMENT
E0CF2A: 48          >1069          PHA              ;SAVE
                    >1070 
                    >1071 * Display "CLOCK CYCLES = $"
E0CF2B: F4 6C C9    >1072          PEA   MSGET      ;message location
E0CF2E: 20 FD CB    >1073          JSR   WRITE2     ;display it
                    >1074 
E0CF31: 68          >1075          PLA              
E0CF32: AA          >1076          TAX              
E0CF33: 68          >1077          PLA              
E0CF34: 20 C6 CF    >1078          JSR   TRANSFR2   ;DISPLAY 4 DIGIT HEX COUNTER VALUE
E0CF37: 3F          >1079          DFB   PRNTAXC    ;CODE
                    >1080 
                    >1081 * display "(x ~2.6)" if fast mode
E0CF38: 2C 36 C0    >1082          BIT   $C036      
E0CF3B: 10 06 =CF43 >1083          BPL   :SLOW      
E0CF3D: F4 7E C9    >1084          PEA   FASTET     ;message location
E0CF40: 20 FD CB    >1085          JSR   WRITE2     ;display it
                    >1086 
E0CF43: 20 4C CF    >1087 :SLOW    JSR   ETRESTOR   ;RESTORE PC & VIA
E0CF46: A9 00       >1088          LDA   #0         
E0CF48: 8D A3 C8    >1089          STA   ETFLAG     ;CLEAR FLAG
E0CF4B: 60          >1090          RTS              ;RETURN TO GETCOMCR
                    >1091 
                    >1092 * Subroutines for CALCTIME
                    >1093 
                    >1094 * Restore PC & VIA
                    >1095 
E0CF4C: AD 72 C8    >1096 ETRESTOR LDA   ETPCLO     
E0CF4F: 8D 1F C8    >1097          STA   PCLO       
E0CF52: AD 73 C8    >1098          LDA   ETPCHI     
E0CF55: 8D 20 C8    >1099          STA   PCHI       
E0CF58: AD 71 C8    >1100 TRRESTOR LDA   ETORBSAV   
E0CF5B: 8D 10 C8    >1101          STA   VIAORB     
E0CF5E: AD 70 C8    >1102          LDA   ETORASAV   
E0CF61: 8D 01 C8    >1103          STA   VIAORA     
E0CF64: AD 6F C8    >1104          LDA   ETIERSAV   
E0CF67: 8D 43 C8    >1105          STA   IERBUFF    ;RESTORE IERBUFF
E0CF6A: 60          >1106          RTS              
                    >1107 
                    >1108 *----------------------------------------
                    >1109 ***** THIS SEGMENTS GLOBAL SUBROUTINES *****
                    >1110 
                    >1111 SUBTABL2                  
                    >1112 
            =0102   >1113 PUTBREAKC EQU  *-SUBTABL2*4+2+$100 
E0CF6B: FF C9       >1114          DA    PUTBREAK-1 
                    >1115 
            =010A   >1116 UPDATEC  EQU   *-SUBTABL2*4+2+$100 
E0CF6D: 35 CA       >1117          DA    UPDATE-1   
                    >1118 
            =0112   >1119 DISREG2C EQU   *-SUBTABL2*4+2+$100 
E0CF6F: 91 CA       >1120          DA    DISREG2-1  
                    >1121 
            =011A   >1122 ROMTORAMC EQU  *-SUBTABL2*4+2+$100 
E0CF71: 57 CC       >1123          DA    ROMTORAM-1 
                    >1124 
            =0122   >1125 DECTGPCC EQU   *-SUBTABL2*4+2+$100 
E0CF73: 52 CD       >1126          DA    DECTGPC-1  
                    >1127 
            =012A   >1128 DECTOGOC EQU   *-SUBTABL2*4+2+$100 
E0CF75: 55 CD       >1129          DA    DECTOGO-1  
                    >1130 
            =0132   >1131 VALIDPCC EQU   *-SUBTABL2*4+2+$100 
E0CF77: 59 CD       >1132          DA    VALIDPC-1  
                    >1133 
            =013A   >1134 VALIDADC EQU   *-SUBTABL2*4+2+$100 
E0CF79: 5C CD       >1135          DA    VALIDAD-1  
                    >1136 
            =0142   >1137 REPLACEC EQU   *-SUBTABL2*4+2+$100 
E0CF7B: 6B CC       >1138          DA    REPLACE-1  
                    >1139 
            =014A   >1140 STAPCIYC EQU   *-SUBTABL2*4+2+$100 
E0CF7D: E5 CB       >1141          DA    STAPCIY-1  
                    >1142 
            =0152   >1143 TRSETVIAC EQU  *-SUBTABL2*4+2+$100 
E0CF7F: 82 CE       >1144          DA    TRSETVIA-1 
                    >1145 
            =015A   >1146 ETVCONTC EQU   *-SUBTABL2*4+2+$100 
E0CF81: 19 CF       >1147          DA    ETVCONT-1  
                    >1148 
                    >1149 *****************************************
                    >1150 *  SEGMENT CROSSOVER AREA  *
                    >1151 *****************************************
                    >1152 
            =000E   >1154 S2END    =     $E0CF91-*  
                    >1155          do    nolist     
                    >1156          LST   OFF        
                    >1157          fin              
                    >1158          ERR   *-1/$E0CF91 
E0CF83: FF FF FF FF >1159          DS    $E0CF91-*,$FF 
                    >1160 
                    >1161 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1162 * Returns with MX = 11, saves registers
                    >1163 
                    >1164 SAVEAXP2                  
E0CF91: 08          >1165          PHP              ;SAVE STATUS
E0CF92:             >1166          MX16             
E0CF92: C2 30       >1166          REP   #$30       
                    >1166          <<<              
E0CF94: 8E 63 C8    >1167          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1168          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1169          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1170          MX8              
E0CF9D: E2 30       >1170          SEP   #$30       
                    >1170          <<<              
E0CF9F: 68          >1171          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1172          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1173          RTS              
                    >1174 
                    >1175 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1176 * restores registers
                    >1177 
                    >1178 RESTAXP2                  
E0CFA4:             >1179          MEMORY8          
E0CFA4: E2 20       >1179          SEP   #$20       
                    >1179          <<<              
E0CFA6: AD 67 C8    >1180          LDA   PSAVESEG   
E0CFA9: 48          >1181          PHA              
E0CFAA:             >1182          MX16             
E0CFAA: C2 30       >1182          REP   #$30       
                    >1182          <<<              
E0CFAC: AE 63 C8    >1183          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1184          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1185          LDA   ASAVESEG   
E0CFB5: 28          >1186          PLP              
E0CFB6: 60          >1187          RTS              
                    >1188          MX    %11        
                    >1189 
                    >1190 *----------------------------------------
                    >1191 * Do a direct transfer to other segments
                    >1192 
                    >1193 JUMPSEG2                  
E0CFB7: 20 91 CF    >1194          JSR   SAVEAXP2   
E0CFBA: AC 29 C8    >1195          LDY   SLOTN0     
E0CFBD: 68          >1196          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1197          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1198          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1199          JSR   RESTAXP2   ;restore after xfer from other seg
E0CFC5: 60          >1200 SEG2RTS  RTS              ;pull destination address from stack
                    >1201 
                    >1202 * TRANSFER TO OTHER SEGMENTS
                    >1203 
                    >1204 TRANSFR2                  
                    >1205 
E0CFC6: 20 91 CF    >1206          JSR   SAVEAXP2   
E0CFC9:             >1207          MEMORY16         
E0CFC9: C2 20       >1207          REP   #$20       
                    >1207          <<<              
E0CFCB: 68          >1208          PLA              ;get return address from stack
E0CFCC: 1A          >1209          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1210          PHA              
E0CFCE:             >1211          MEMORY8          
E0CFCE: E2 20       >1211          SEP   #$20       
                    >1211          <<<              
E0CFD0: A9 02       >1212          LDA   #2          ;CURRENT SEG #
E0CFD2: 48          >1213          PHA              
E0CFD3: A0 00       >1214          LDY   #0         
E0CFD5: B3 02       >1215          LDA   (2,S),Y     ;GET CODE BYTE
E0CFD7: 48          >1216          PHA              ;SAVE CODE
E0CFD8: 29 07       >1217          AND   #$07        ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1218          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1219          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1220 * NEW SEGMENT
E0CFE0: 68          >1221          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1222          PEA   RETURN2     ;where to return to
E0CFE4: 29 F8       >1223          AND   #$F8        ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1224          LSR              
E0CFE7: 4A          >1225          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1226 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1227          TAY              
E0CFE9:             >1228          MEMORY16         
E0CFE9: C2 20       >1228          REP   #$20       
                    >1228          <<<              
E0CFEB: B9 6B CF    >1229          LDA   SUBTABL2,Y 
E0CFEE: 48          >1230          PHA              
E0CFEF: 80 B3 =CFA4 >1231          BRA   RESTAXP2   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1232          MX    %11        
                    >1233 
                    >1234 * RETURN HERE FROM SUBROUTINE
                    >1235 
            =E0CFF0 >1236 RETURN2  EQU   *-1        
E0CFF1: 20 91 CF    >1237          JSR   SAVEAXP2   
E0CFF4: 68          >1238          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1239          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1240          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1241          BRA   RESTAXP2   
                    >1242 
E0CFFD: FF FF FF    >1243          DS    \,$FF       ;PUT OBJECT AT NEXT PAGE
                     43            PUT   SEG3       
                    >2    *********************************
                    >3    *           SEG3
                    >4    *********************************
                    >5    
                    >6    ]segnum  =     #$0300      ;current segment number
                    >7    
                    >8             ORG   $E0C800     ;CODE RUNS HERE
                    >9    
                    >10   * THIS SPACE IS SHARED WITH THE VIA AND THE RAM.
                    >11   
E0C800: 00          >12            HEX   00          ;NEED THIS BYTE SO $C7FF IS NOT REFERENCED,
                    >13                             ; TO MAKE WORK IN SLOT #7
                    >14   
                    >15   **************************************************
                    >16   *  TABLE2
                    >17   * Number contains processor and address mode info. Location
                    >18   * in matrix is opcode.
                    >19   
                    >20   * BITS  7  6 5  4 3 2 1 0
                    >21   *       R  T T  ADDRESS MODE
                    >22   *       E  Y Y  0 TO $17
                    >23   *       S  P P
                    >24   *       E  E E
                    >25   *       R  0 0= 6502
                    >26   *       V  0 1= 65C02
                    >27   *       E  1 0= 65802 & 65816
                    >28   *       D  1 1= RESERVED
                    >29   *       0 = ALWAYS
                    >30   
                    >31   * Address modes
                    >32   
                    >33   * $MODE BYTES SYMBOL ADDRESS
                    >34   *   0    2-3    #      IMED
                    >35   *   1     3     a      ABS
                    >36   *   2     4     al     ABS.L
                    >37   *   3     2     d      DIR
                    >38   *   4     1   i or S   ACC;IMP;STK
                    >39   *   5     2   (d),y    DIR.IND.INX
                    >40   *   6     2   [d],y    DIR.IND.L.INX
                    >41   *   7     2   (d,x)    DIR.INX.IND
                    >42   *   8     2    d,x     DIR.INX.W/X
                    >43   *   9     2    d,y     DIR.INX.W/Y
                    >44   *   A     3    a,x     ABS.INX.W/X
                    >45   *   B     4    al,x    ABS.L.INX.W/X
                    >46   *   C     3    a,y     ABS.INX.W/Y
                    >47   *   D     2     r      P.C.REL
                    >48   *   E     3     rl     P.C.REL.L
                    >49   *   F     3    (a)     ABS.IND.
                    >50   *  10     3    [a]     ABS.IND.L
                    >51   *  11     2    (d)     DIR.IND.
                    >52   *  12     2    [d]     DIR.IND.L
                    >53   *  13     3   (a,x)    ABS.INX.IND
                    >54   *  14     2    d,s     STK.REL
                    >55   *  15     2   (d,s),y  STK.REL.IND.INX
                    >56   *  16     2     s      STK
                    >57   *  17     3    b,b     XYZ
                    >58   *  18     2     #      IMED 2 bytes only (SEP,REP)
                    >59   *  19     3     a      ABS program flow (JMP, JSR etc.) no effective address
                    >60   
                    >61   * Special notes
                    >62   
                    >63   * PER - rl ; PEI - d ; PEA - a
                    >64   * REP & SEP - 2 BYTES ALWAYS
                    >65   * BRK - 1 BYTES IN 6502 & C02 AND 2 BYTES IN 65816 & 802.
                    >66   
            =E0C801 >67   TABLE2   EQU   *          
                    >68   *      LSD -->  0 1 2 3 4 5 6 7 8 9 A B C D E F
                    >69   
E0C801: 04 07 56 54 >70            HEX   04075654230303520400044421010142 
E0C811: 0D 05 31 55 >71            HEX   0D05315523080846040C2444210A0A4B 
E0C821: 19 07 42 54 >72            HEX   19074254030303520400044401010142 
E0C831: 0D 05 31 55 >73            HEX   0D05315528080846040C24442A0A0A4B 
E0C841: 04 07 44 54 >74            HEX   04074454570303520400044419010142 
E0C851: 0D 05 31 55 >75            HEX   0D05315557080846040C2444420A0A4B 
E0C861: 04 07 4E 54 >76            HEX   04074E5423030352040004440F010142 
E0C871: 0D 05 31 55 >77            HEX   0D05315528080846040C2444330A0A4B 
E0C881: 2D 07 4E 54 >78            HEX   2D074E54030303520420044401010142 
E0C891: 0D 05 31 55 >79            HEX   0D05315508080946040C0444210A2A4B 
E0C8A1: 00 07 00 54 >80            HEX   00070054030303520400044401010142 
E0C8B1: 0D 05 31 55 >81            HEX   0D05315508080946040C04440A0A0C4B 
E0C8C1: 00 07 58 54 >82            HEX   00075854030303520400042401010142 
E0C8D1: 0D 05 31 55 >83            HEX   0D05315543080846040C2424500A0A4B 
E0C8E1: 00 07 58 54 >84            HEX   00075854030303520400044401010142 
E0C8F1: 0D 05 31 55 >85            HEX   0D05315559080846040C2444530A0A4B 
                    >86   
                    >87   **************************************************
                    >88   *  TABLE3
                    >89   * Each 2 byte number represents the symbols displayed and the
                    >90   * number of bytes for that mode.
                    >91   
                    >92   * BIT # --> 7 6 5 4 3 2 1 0 7  6  5 4 3  2 1 0
                    >93   *SYMBOL --> 0 0 # ( [ a x x 0 ,S ,X ] ) ,Y { e
                    >94   
                    >95   * a = 1 DISPLAY BYTES AS IS
                    >96   * a = 0 DISPLAY RELATIVE ADDRESS
                    >97   
                    >98   * xx = NUMBER OF BYTES IN INSTRUCTION - 1
                    >99   * 00 = 1, 01 = 2, 10 = 3, 11 = 4
                    >100  
                    >101  * { = 0 NO ADDRESS DISPLAYED
                    >102  * { = 1 DISPLAY ADDRESS
                    >103  
                    >104  * e = 0 RELATIVE OFFSET OR NO ADDRESS
                    >105  * e = 1 EFFECTIVE ADDRESS
                    >106  
            =E0C901 >107  TABLE3   EQU   *          
                    >108  * Start with mode 0
                    >109  
E0C901: 25 00       >110           DDB   %0010010100000000 ; mode $0 #nn or #nnnn
E0C903: 06 03       >111           DDB   %0000011000000011 ; mode $1  a
E0C905: 07 03       >112           DDB   %0000011100000011 ; mode $2  al
E0C907: 05 03       >113           DDB   %0000010100000011 ; mode $3  d
E0C909: 04 00       >114           DDB   %0000010000000000 ; mode $4  i or S
E0C90B: 15 0F       >115           DDB   %0001010100001111 ; mode $5  (d),y
E0C90D: 0D 17       >116           DDB   %0000110100010111 ; mode $6  [d],y
E0C90F: 15 2B       >117           DDB   %0001010100101011 ; mode $7  (d,x)
E0C911: 05 23       >118           DDB   %0000010100100011 ; mode $8  d,x
E0C913: 05 07       >119           DDB   %0000010100000111 ; mode $9  d,y
E0C915: 06 23       >120           DDB   %0000011000100011 ; mode $A  a,x
E0C917: 07 23       >121           DDB   %0000011100100011 ; mode $B  al,x
E0C919: 06 07       >122           DDB   %0000011000000111 ; mode $C  a,y
E0C91B: 01 02       >123           DDB   %0000000100000010 ; mode $D  r
E0C91D: 02 02       >124           DDB   %0000001000000010 ; mode $E  rl
E0C91F: 16 0B       >125           DDB   %0001011000001011 ; mode $F (a)
E0C921: 0E 13       >126           DDB   %0000111000010011 ; mode $10 [a]
E0C923: 15 0B       >127           DDB   %0001010100001011 ; mode $11 (d)
E0C925: 0D 13       >128           DDB   %0000110100010011 ; mode $12 [d]
E0C927: 16 2B       >129           DDB   %0001011000101011 ; mode $13 (a,x)
E0C929: 05 43       >130           DDB   %0000010101000011 ; mode $14 d,s
E0C92B: 15 4F       >131           DDB   %0001010101001111 ; mode $15 (d,s),y
E0C92D: 05 00       >132           DDB   %0000010100000000 ; mode $16 s
E0C92F: 06 00       >133           DDB   %0000011000000000 ; mode $17 b,b
E0C931: 25 00       >134           DDB   %0010010100000000 ; mode $18 #nn (SEP,REP)
E0C933: 06 00       >135           DDB   %0000011000000000 ; mode $19 a (JMP,JSR,PEA)
                    >136  TBL3END                   
                    >137  
                    >138  **************************************************
                    >139  * Mnemonic table
                    >140  * Contains mnemonics compressed into 2 bytes.
                    >141  
                    >142  MNEMTABL                  
                    >143  
                    >144  *ADC
E0C935: 04 83       >145           HEX   0483       
                    >146  *AND
E0C937: 05 C4       >147           HEX   05C4       
                    >148  *ASL
E0C939: 06 6C       >149           HEX   066C       
                    >150  *BCC
E0C93B: 08 63       >151           HEX   0863       
                    >152  *BCS
E0C93D: 08 73       >153           HEX   0873       
                    >154  *BEQ
E0C93F: 08 B1       >155           HEX   08B1       
                    >156  *BIT
E0C941: 09 34       >157           HEX   0934       
                    >158  *BMI
E0C943: 09 A9       >159           HEX   09A9       
                    >160  *BNE
E0C945: 09 C5       >161           HEX   09C5       
                    >162  *BPL
E0C947: 0A 0C       >163           HEX   0A0C       
                    >164  *BRA
E0C949: 0A 41       >165           HEX   0A41       
                    >166  *BRK
E0C94B: 0A 4B       >167           HEX   0A4B       
                    >168  *BRL
E0C94D: 0A 4C       >169           HEX   0A4C       
                    >170  *BVC
E0C94F: 0A C3       >171           HEX   0AC3       
                    >172  *BVS
E0C951: 0A D3       >173           HEX   0AD3       
                    >174  *CLC
E0C953: 0D 83       >175           HEX   0D83       
                    >176  *CLD
E0C955: 0D 84       >177           HEX   0D84       
                    >178  *CLI
E0C957: 0D 89       >179           HEX   0D89       
                    >180  *CLV
E0C959: 0D 96       >181           HEX   0D96       
                    >182  *CMP
E0C95B: 0D B0       >183           HEX   0DB0       
                    >184  *COP
E0C95D: 0D F0       >185           HEX   0DF0       
                    >186  *CPX
E0C95F: 0E 18       >187           HEX   0E18       
                    >188  *CPY
E0C961: 0E 19       >189           HEX   0E19       
                    >190  *DEC
E0C963: 10 A3       >191           HEX   10A3       
                    >192  *DEX
E0C965: 10 B8       >193           HEX   10B8       
                    >194  *DEY
E0C967: 10 B9       >195           HEX   10B9       
                    >196  *EOR
E0C969: 15 F2       >197           HEX   15F2       
                    >198  *INC
E0C96B: 25 C3       >199           HEX   25C3       
                    >200  *INX
E0C96D: 25 D8       >201           HEX   25D8       
                    >202  *INY
E0C96F: 25 D9       >203           HEX   25D9       
                    >204  *JML
E0C971: 29 AC       >205           HEX   29AC       
                    >206  *JMP
E0C973: 29 B0       >207           HEX   29B0       
                    >208  *JSL
E0C975: 2A 6C       >209           HEX   2A6C       
                    >210  *JSR
E0C977: 2A 72       >211           HEX   2A72       
                    >212  *LDA
E0C979: 30 81       >213           HEX   3081       
                    >214  *LDX
E0C97B: 30 98       >215           HEX   3098       
                    >216  *LDY
E0C97D: 30 99       >217           HEX   3099       
                    >218  *LSR
E0C97F: 32 72       >219           HEX   3272       
                    >220  *MVN
E0C981: 36 CE       >221           HEX   36CE       
                    >222  *MVP
E0C983: 36 D0       >223           HEX   36D0       
                    >224  *NOP
E0C985: 39 F0       >225           HEX   39F0       
                    >226  *ORA
E0C987: 3E 41       >227           HEX   3E41       
                    >228  *PEA
E0C989: 40 A1       >229           HEX   40A1       
                    >230  *PEI
E0C98B: 40 A9       >231           HEX   40A9       
                    >232  *PER
E0C98D: 40 B2       >233           HEX   40B2       
                    >234  *PHA
E0C98F: 41 01       >235           HEX   4101       
                    >236  *PHB
E0C991: 41 02       >237           HEX   4102       
                    >238  *PHD
E0C993: 41 04       >239           HEX   4104       
                    >240  *PHK
E0C995: 41 0B       >241           HEX   410B       
                    >242  *PHP
E0C997: 41 10       >243           HEX   4110       
                    >244  *PHX
E0C999: 41 18       >245           HEX   4118       
                    >246  *PHY
E0C99B: 41 19       >247           HEX   4119       
                    >248  *PLA
E0C99D: 41 81       >249           HEX   4181       
                    >250  *PLB
E0C99F: 41 82       >251           HEX   4182       
                    >252  *PLD
E0C9A1: 41 84       >253           HEX   4184       
                    >254  *PLP
E0C9A3: 41 90       >255           HEX   4190       
                    >256  *PLX
E0C9A5: 41 98       >257           HEX   4198       
                    >258  *PLY
E0C9A7: 41 99       >259           HEX   4199       
                    >260  *REP
E0C9A9: 48 B0       >261           HEX   48B0       
                    >262  *ROL
E0C9AB: 49 EC       >263           HEX   49EC       
                    >264  *ROR
E0C9AD: 49 F2       >265           HEX   49F2       
                    >266  *RTI
E0C9AF: 4A 89       >267           HEX   4A89       
                    >268  *RTL
E0C9B1: 4A 8C       >269           HEX   4A8C       
                    >270  *RTS
E0C9B3: 4A 93       >271           HEX   4A93       
                    >272  *SBC
E0C9B5: 4C 43       >273           HEX   4C43       
                    >274  *SEC
E0C9B7: 4C A3       >275           HEX   4CA3       
                    >276  *SED
E0C9B9: 4C A4       >277           HEX   4CA4       
                    >278  *SEI
E0C9BB: 4C A9       >279           HEX   4CA9       
                    >280  *SEP
E0C9BD: 4C B0       >281           HEX   4CB0       
                    >282  *STA
E0C9BF: 4E 81       >283           HEX   4E81       
                    >284  *STP
E0C9C1: 4E 90       >285           HEX   4E90       
                    >286  *STX
E0C9C3: 4E 98       >287           HEX   4E98       
                    >288  *STY
E0C9C5: 4E 99       >289           HEX   4E99       
                    >290  *STZ
E0C9C7: 4E 9A       >291           HEX   4E9A       
                    >292  *TAX
E0C9C9: 50 38       >293           HEX   5038       
                    >294  *TAY
E0C9CB: 50 39       >295           HEX   5039       
                    >296  *TCD
E0C9CD: 50 64       >297           HEX   5064       
                    >298  *TCS
E0C9CF: 50 73       >299           HEX   5073       
                    >300  *TDC
E0C9D1: 50 83       >301           HEX   5083       
                    >302  *TRB
E0C9D3: 52 42       >303           HEX   5242       
                    >304  *TSB
E0C9D5: 52 62       >305           HEX   5262       
                    >306  *TSC
E0C9D7: 52 63       >307           HEX   5263       
                    >308  *TSX
E0C9D9: 52 78       >309           HEX   5278       
                    >310  *TXA
E0C9DB: 53 01       >311           HEX   5301       
                    >312  *TXS
E0C9DD: 53 13       >313           HEX   5313       
                    >314  *TXY
E0C9DF: 53 19       >315           HEX   5319       
                    >316  *TYA
E0C9E1: 53 21       >317           HEX   5321       
                    >318  *TYX
E0C9E3: 53 38       >319           HEX   5338       
                    >320  *WAI
E0C9E5: 5C 29       >321           HEX   5C29       
                    >322  *WDM
E0C9E7: 5C 8D       >323           HEX   5C8D       
                    >324  *XBA
E0C9E9: 60 41       >325           HEX   6041       
                    >326  *XCE
E0C9EB: 60 65       >327           HEX   6065       
                    >328  
                    >329  * ASSEMBLER DIRECTIVES
                    >330  
                    >331  *HEX
E0C9ED: 20 B8       >332           HEX   20B8       
                    >333  
                    >334  *ADR
E0C9EF: 04 92       >335           HEX   0492       
                    >336  
                    >337  ****************************************
                    >338  * THIS POINT MUST BE $CA00 OR ABOVE.
                    >339  ****************************************
                    >340  
                    >341           ERR   *-1/$E0CA00 
E0C9F1: FF FF FF FF >342           DS    $E0CA00-*,$FF 
                    >343  
                    >344  ***** TABLE4 *****
                    >345  * POSSIBLE SYMBOLS USED IN OPERAND
                    >346  
E0CA00: 00          >347           HEX   00          ;SO DOESN'T LOOK LIKE 2 BYTE SYMBOL
                    >348  TABLE4                    
E0CA01: A3 00       >349           ASC   "#",00     
E0CA03: A8 00       >350           ASC   "(",00     
E0CA05: DB 00       >351           ASC   "[",00     
E0CA07: AC D3 00    >352           ASC   ",S",00    
E0CA0A: AC D8 00    >353           ASC   ",X",00    
E0CA0D: DD 00       >354           ASC   "]",00     
E0CA0F: A9 00       >355           ASC   ")",00     
E0CA11: AC D9 00    >356           ASC   ",Y",00    
                    >357  
                    >358  ********************************
                    >359  *  MINI ASSEMBLER
                    >360  ********************************
                    >361  
            =E0CA14 >362  COMDMA   EQU   *          
E0CA14: F0 0E =CA24 >363           BEQ   MANOADDR   ;IF NO ADDRESS FOLLOWS
E0CA16: 20 17 CF    >364           JSR   LOADMEM     ;GET ADDRESS
E0CA19: 90 09 =CA24 >365           BCC   MANOADDR   ;ADDRESS OK
E0CA1B: A9 04       >366  BPERR3   LDA   #BADPAR     ;BAD PARAMETER ERROR NUMBER
                    >367  ERREXIT3                  
E0CA1D: 20 C6 CF    >368           JSR   TRANSFR3   ;INVALID ADDRESS
E0CA20: 2D          >369           DFB   ERRBEEPC   ;CODE
E0CA21: 4C 4A CF    >370           JMP   GETCOM3    
                    >371  
                    >372  MANOADDR                  
E0CA24: 20 1D CC    >373           JSR   DISASM      ; DISPLAY INSTRUCTION
E0CA27: A2 13       >374           LDX   #19         ;SPACES
E0CA29: 20 C6 CF    >375           JSR   TRANSFR3   
E0CA2C: 27          >376           DFB   PRBL2C      ;CODE
E0CA2D: A9 A1       >377           LDA   #"!"       
E0CA2F: 8D FA C8    >378           STA   PROMPT      ;NEW PROMPT
E0CA32: 20 C6 CF    >379           JSR   TRANSFR3   ;GET INPUT LINE
E0CA35: 57          >380           DFB   GETLNC      ;CODE
E0CA36: 90 03 =CA3B >381           BCC   :NOESC     
E0CA38: 4C 4A CF    >382           JMP   GETCOM3     ;if "esc" key
E0CA3B: E8          >383  :NOESC   INX              ;X=0 IF ONLY <CR> ENTERED
E0CA3C: A0 00       >384           LDY   #00        
E0CA3E: 20 C6 CF    >385           JSR   TRANSFR3   ;GET FIRST CHARACTER
E0CA41: 01          >386           DFB   GETCHRC     ;CODE
E0CA42: D0 0B =CA4F >387           BNE   MASTLET1   ;CHECK INPUT
                    >388  
                    >389  * Only CR entered so go to next instruction
                    >390  * NUMDISP = # of bytes in instruction-1
                    >391  
E0CA44: AC 09 C9    >392           LDY   NUMDISP    
                    >393  MAINCMEM                  
E0CA47: 20 0F CF    >394           JSR   INCMEMLH   ;INC MEM POINTER
E0CA4A: 88          >395           DEY              
E0CA4B: 10 FA =CA47 >396           BPL   MAINCMEM   
E0CA4D: 30 D5 =CA24 >397           BMI   MANOADDR   ;GO TO NEXT INSTRUCTION
                    >398  
                    >399  MASTLET1                  
E0CA4F: 8D 0A C9    >400           STA   MNEMCOMP   ;TEMP SAVE
                    >401  
                    >402  * Cause error if a soft break is at this location
                    >403  
E0CA52: 8C A2 C9    >404           STY   TEMP+1      ;SAVE Y
                    >405  * LETTER 1,2,3 USED BY VALIDAD
E0CA55:             >406           MEMORY16         
E0CA55: C2 20       >406           REP   #$20       
                    >406           <<<              
E0CA57: AD 3D C8    >407           LDA   MEMLOW     
E0CA5A: 8D 30 C8    >408           STA   LETTER1     ;used by VALIDAD
E0CA5D:             >409           MEMORY8          
E0CA5D: E2 20       >409           SEP   #$20       
                    >409           <<<              
E0CA5F: 20 C6 CF    >410           JSR   TRANSFR3   ;IS THIS LOCATION A REAL BREAK?
E0CA62: 3A          >411           DFB   VALIDADC   ;CODE
E0CA63: D0 03 =CA68 >412           BNE   :OK         ;IF NO
E0CA65: 4C 02 CC    >413           JMP   MANOTRAM   ;IF REAL BRK, DISPLAY **ACCESS ERROR**
E0CA68: AC A2 C9    >414  :OK      LDY   TEMP+1      ;RESTORE Y
                    >415  
E0CA6B: AD 0A C9    >416           LDA   MNEMCOMP   ;RESTORE
E0CA6E: 0E 0B C9    >417           ASL   MNEMCOMP+1 ;MAKE BIT 0 = 0
E0CA71: 20 27 CF    >418           JSR   PACKMNEM   ;PACK 1ST LETTER OF MNEMONIC
E0CA74: 20 C6 CF    >419           JSR   TRANSFR3   ;
E0CA77: 01          >420           DFB   GETCHRC     ;CODE
E0CA78: F0 2D =CAA7 >421           BEQ   MAERR      
E0CA7A: 20 27 CF    >422           JSR   PACKMNEM   ;PACK 2ND LETTER
E0CA7D: 20 C6 CF    >423           JSR   TRANSFR3   ;
E0CA80: 01          >424           DFB   GETCHRC     ;CODE
E0CA81: F0 24 =CAA7 >425           BEQ   MAERR      
E0CA83: 20 27 CF    >426           JSR   PACKMNEM   ;PACK 3RD LETTER
E0CA86: 8E 49 C8    >427           STX   XBUFF      
                    >428  
                    >429  * MNEMCOMP & MNEMCOMP+1 contain 2 byte mnemonic in compressed form.
                    >430  * Compare with compressed mnemonics in MNEMTABL
                    >431  
E0CA89: A2 00       >432           LDX   #0         
                    >433  FINDMNEM                  
E0CA8B:             >434           MEMORY16         
E0CA8B: C2 20       >434           REP   #$20       
                    >434           <<<              
E0CA8D: AD 0A C9    >435           LDA   MNEMCOMP   
E0CA90: CD 00 C8    >436           CMP   $C800       ;SELECT EXT ROM
E0CA93: DD 35 C9    >437           CMP   MNEMTABL,X ;DO THEY MATCH?
E0CA96:             >438           MEMORY8          
E0CA96: E2 20       >438           SEP   #$20       
                    >438           <<<              
E0CA98: 8D 00 CF    >439           STA   $CF00       ;ENABLE EXT RAM
E0CA9B: D0 02 =CA9F >440           BNE   NEXTMNEM   ;IF NO, TRY NEXT MNEM
E0CA9D: F0 21 =CAC0 >441           BEQ   FOUNDMNE   ;IF YES
                    >442  
                    >443  NEXTMNEM                  
E0CA9F: E8          >444           INX              
E0CAA0: E8          >445           INX              
E0CAA1: E0 BC       >446           CPX   #$BC        ;OUT OF MNEMONICS?
E0CAA3: 90 E6 =CA8B >447           BLT   FINDMNEM   ;IF NO
                    >448  
                    >449  * If out of mnemonics or other error, come here.
                    >450  
E0CAA5: A0 0A       >451  MAERROP  LDY   #10         ;OPCODE ERROR
E0CAA7: 98          >452  MAERR    TYA              
E0CAA8: 18          >453           CLC              
E0CAA9: 69 0B       >454           ADC   #11         ;POSITION UNDER ERROR
E0CAAB: AA          >455           TAX              
E0CAAC: 20 C6 CF    >456           JSR   TRANSFR3   ;PRINT SPACES (X REG)
E0CAAF: 27          >457           DFB   PRBL2C      ;CODE
E0CAB0: A9 DE       >458           LDA   #"^"       
E0CAB2: 20 75 CE    >459           JSR   COUT3       ;INDICATE WHERE ERROR WAS
E0CAB5: 20 C6 CF    >460           JSR   TRANSFR3   ;PRINT "ERR" RING BELL
E0CAB8: 1F          >461           DFB   PRERRC      ;code
E0CAB9: 20 C6 CF    >462           JSR   TRANSFR3   ;<RETURN>
E0CABC: 0F          >463           DFB   CROUTC      ;code
E0CABD: 4C 24 CA    >464           JMP   MANOADDR   ;TRY AGAIN
                    >465  
                    >466  * Found the mnemonic in MNEMTABL
                    >467  
E0CAC0: 8E 40 C8    >468  FOUNDMNE STX   OPCODE      ;USE OPCODE AS TEMP STORAGE FOR # OF MNEMONIC
                    >469  
                    >470  * Build a 2 byte number of display info, as in TABLE 3
                    >471  
E0CAC3: 9C B0 C9    >472           STZ   MODE        ;TEMP BUFFER
E0CAC6: 9C 74 C8    >473           STZ   OPERAND    
E0CAC9: A9 02       >474           LDA   #02         ;SET BIT USED AS FINISHED FLAG
E0CACB: 8D 75 C8    >475           STA   OPERAND+1  ;FORM 2 BYTES HERE
                    >476  CHEKSYMB                  
E0CACE: AE 49 C8    >477           LDX   XBUFF       ;GET STRING POINTER
                    >478  FROMADRS                  
E0CAD1: 20 C6 CF    >479           JSR   TRANSFR3   ;GET CHAR
E0CAD4: 01          >480           DFB   GETCHRC     ;CODE
E0CAD5: 8E 49 C8    >481           STX   XBUFF      
E0CAD8: AE B0 C9    >482           LDX   MODE        ;TABLE4 POINTER
E0CADB: DD 01 CA    >483           CMP   TABLE4,X   
E0CADE: F0 10 =CAF0 >484           BEQ   ISSYMB     
                    >485  
                    >486  * Symbols don"t match
                    >487  
E0CAE0: 88          >488           DEY              
E0CAE1: EE 49 C8    >489           INC   XBUFF       ;TRY SAME CHAR AGAIN
E0CAE4: BD 00 CA    >490           LDA   TABLE4-1,X ;WAS IT A 2 BYTE SYMBOL
E0CAE7: F0 04 =CAED >491           BEQ   CLRSHFT     ;IF NO
E0CAE9: 88          >492           DEY              ;IF YES, BACKUP TO 1ST CHARACTER
E0CAEA: EE 49 C8    >493           INC   XBUFF      
E0CAED: 18          >494  CLRSHFT  CLC              
E0CAEE: 90 06 =CAF6 >495           BCC   SHFTSYMB   ;<ALWAYS>
                    >496  
                    >497  * Symbols do match
                    >498  
E0CAF0: BD 02 CA    >499  ISSYMB   LDA   TABLE4+1,X ;IS IT TWO BYTE SYMBOL?
E0CAF3: D0 14 =CB09 >500           BNE   INCSYMB     ;IF YES, BOTH BYTES MUST MATCH
E0CAF5: 38          >501           SEC              
E0CAF6: 2E 75 C8    >502  SHFTSYMB ROL   OPERAND+1  
E0CAF9: 2E 74 C8    >503           ROL   OPERAND    
E0CAFC: 30 41 =CB3F >504           BMI   SYMBDONE   ;FLAG BIT IS IN BIT7
                    >505  
E0CAFE: E0 13       >506           CPX   #19         ;OUT OF SYMBOLS TO CHECK?
E0CB00: B0 EB =CAED >507           BGE   CLRSHFT     ;IF YES, KEEP SHIFTING TILL DONE
                    >508  
                    >509  * Inc TABLE4 pointer to next symbol
                    >510  
E0CB02: E8          >511           INX              
E0CB03: E8          >512           INX              
E0CB04: BD 01 CA    >513           LDA   TABLE4,X   
E0CB07: D0 01 =CB0A >514           BNE   NEXTSYM    
E0CB09: E8          >515  INCSYMB  INX              
                    >516  NEXTSYM                   
E0CB0A: 8E B0 C9    >517           STX   MODE       
                    >518  
                    >519  * Is address next ?
                    >520  
E0CB0D: E0 06       >521           CPX   #$6         ;CHECK FOR ADDRESS?
E0CB0F: D0 BD =CACE >522           BNE   CHEKSYMB   
                    >523  
                    >524  * Is address
                    >525  * Check for hex data & read
                    >526  
E0CB11: AE 49 C8    >527           LDX   XBUFF       ;GET STRING POINTER
                    >528  
E0CB14: AD 08 C9    >529           LDA   MEMPBR     
E0CB17: 48          >530           PHA              ;PREVENT CHKREADA FROM CHANGING MEMPBR
E0CB18: 20 C6 CF    >531           JSR   TRANSFR3   ;READ NUMBER, START AT CURRENT CHAR
E0CB1B: 11          >532           DFB   CHKREADAC  ;code
E0CB1C: 68          >533           PLA              
E0CB1D: 8D 08 C9    >534           STA   MEMPBR      ;RESTORE
                    >535  
E0CB20: EE 07 C9    >536           INC   INLENGTH   
E0CB23: 4E 07 C9    >537           LSR   INLENGTH   ;CONVERT TO # OF BYTES IN ADDRESS
E0CB26: AD 75 C8    >538           LDA   OPERAND+1  
E0CB29: 38          >539           SEC              
E0CB2A: 2A          >540           ROL              ;ALWAYS SET BIT2 OF 1ST BYTE
E0CB2B: 0A          >541           ASL              
E0CB2C: 0A          >542           ASL              
E0CB2D: 0D 07 C9    >543           ORA   INLENGTH   ;BIT 7 OF BYTE 2 IS ALWAYS 0
E0CB30: 0A          >544           ASL              
E0CB31: 8D 75 C8    >545           STA   OPERAND+1  ;INCLUDE # OF BYTES INFO
E0CB34: 2E 74 C8    >546           ROL   OPERAND    
E0CB37: 88          >547           DEY              
E0CB38: E8          >548           INX              
E0CB39: 4C D1 CA    >549           JMP   FROMADRS   
                    >550  
                    >551  * Assembler input error
                    >552  
E0CB3C: 4C A7 CA    >553  TOMAERR  JMP   MAERR      
                    >554  
                    >555  * The two bytes representing the mode of the instruction
                    >556  * are finished. Find the possible modes of the instruction.
                    >557  * The relative instructions; BEQ $34, may look like mode #3
                    >558  * BEQ $0034 will look like mode #1. Mode #E will look like
                    >559  * mode #2, some modes look the same. Try for exact match,
                    >560  * if mode of MNEM & this mode don't match try to match in
                    >561  * TABLE3 with different mode(some look the same).
                    >562  * If still no match with MNEM, or in TABLE3, then maybee is
                    >563  * relative instruction. Set bit 2 of 1st byte to 0 and try
                    >564  * for match, if no match, decrease # of bytes (bits 0 & 1)
                    >565  * by 1 and try again.
                    >566  
                    >567  * Find the opcode of the instruction by matching the
                    >568  * mode of the input OPERAND with the mode of the input MNEM.
                    >569  
                    >570  SYMBDONE                  
E0CB3F: A2 08       >571           LDX   #8          ;SET UP FOR DISPLAYING GENERATED CODE
E0CB41: 20 6A CE    >572           JSR   SPACES      ;ALIGN WITH PREVIOUS CODE
                    >573  
E0CB44: 20 82 CE    >574  :LOOKOP  JSR   FINDOPCD   ;LOOK FOR OPCODE
E0CB47: 90 73 =CBBC >575           BCC   FOUNDOP     ;OPCODE IN OPCODE BUFFER, MODE IN MODE
                    >576  
                    >577  * No match found between MNEM modes & OPERAND mode
                    >578  * If mode is # word then force OPERAND to 1 byte mode & try again
                    >579  
E0CB49: AD 74 C8    >580           LDA   OPERAND    
E0CB4C: C9 A6       >581           CMP   #%10100110 ;is it # WORD
E0CB4E: D0 07 =CB57 >582           BNE   :TRYREL     ;if no
E0CB50: A9 25       >583           LDA   #%00100101 ;force to # BYTE
E0CB52: 8D 74 C8    >584           STA   OPERAND    
E0CB55: 80 ED =CB44 >585           BRA   :LOOKOP     ;try again
                    >586  
                    >587  * No match found between MNEM modes & OPERAND mode
                    >588  * try looking at relative modes with Z page destinations
                    >589  * or relative long.
                    >590  
E0CB57: 29 3B       >591  :TRYREL  AND   #%00111011 ;SET BITS 7, 6, & 2 TO 0
E0CB59: 8D 74 C8    >592           STA   OPERAND    
E0CB5C: 20 82 CE    >593           JSR   FINDOPCD   ;LOOK FOR OPCODE
E0CB5F: 90 22 =CB83 >594           BCC   RELATIVE   ;FOUND IT. RELATIVE INST.
                    >595  
                    >596  * No match try looking at all other relative modes
                    >597  
E0CB61: A9 3C       >598           LDA   #%00111100 
E0CB63: 2C 74 C8    >599           BIT   OPERAND    
E0CB66: D0 08 =CB70 >600           BNE   LOOKDIR     ;NOT RELATIVE MODE SO LOOK FOR DIRECTIVE
E0CB68: CE 74 C8    >601           DEC   OPERAND     ;REDUCE # OF BYTES BY 1 TO MATCH RELATIVE
E0CB6B: 20 82 CE    >602           JSR   FINDOPCD   
E0CB6E: 90 13 =CB83 >603           BCC   RELATIVE   ;FOUND IT RELATIVE INST.
                    >604  
                    >605  *-----------------------------------------------
                    >606  * Not able to match MNEM modes with operand mode
                    >607  * so look for assembler directive
                    >608  
E0CB70: AE 40 C8    >609  LOOKDIR  LDX   OPCODE      ;GET MNEMONIC NUMBER
E0CB73: E0 B8       >610           CPX   #$B8        ;IS IT HEX?
E0CB75: D0 04 =CB7B >611           BNE   :CKADR      ;IF NO
E0CB77: A9 01       >612           LDA   #1          ;1 BYTE OF HEX DATA
E0CB79: D0 5F =CBDA >613           BNE   ADRHEX     
E0CB7B: E0 BA       >614  :CKADR   CPX   #$BA        ;IS IT ADR?
E0CB7D: D0 BD =CB3C >615           BNE   TOMAERR     ;IF NOT MUST BE MA ERROR
E0CB7F: A9 02       >616           LDA   #2          ;2 BYTES OF ADR DATA
E0CB81: D0 57 =CBDA >617           BNE   ADRHEX      ;<ALWAYS>
                    >618  
                    >619  *----------------------------------
                    >620  ***** RELATIVE MODE *****
                    >621  
                    >622  RELATIVE                  
E0CB83: 20 0F CF    >623           JSR   INCMEMLH   ;CONVERT ADDRESS TO RELATIVE OFFSET
E0CB86: 20 0F CF    >624           JSR   INCMEMLH   
                    >625  
                    >626  * Offset is calculated from address of instruction
                    >627  * following the branch operand
                    >628  * subtract MEMLOW & MEMHI from TEMP+1 & TEMP+2, which should
                    >629  * give me the branch offset
                    >630  
E0CB89: AD B0 C9    >631           LDA   MODE        ;IS IT REL. LONG
E0CB8C: C9 1C       >632           CMP   #$E*2       ;MODE IS TIMES 2
E0CB8E: 18          >633           CLC              
E0CB8F: F0 01 =CB92 >634           BEQ   RELLONG     ;IF YES, SUBTRACT AN EXTRA 1
E0CB91: 38          >635           SEC              
E0CB92: AD 30 C8    >636  RELLONG  LDA   LETTER1     ;LOW BYTE OF OPERAND ADDRESS
E0CB95: ED 3D C8    >637           SBC   MEMLOW     
E0CB98: 8D 30 C8    >638           STA   LETTER1    
E0CB9B: AD 31 C8    >639           LDA   LETTER2     ;HI BYTE OF OPERAND
E0CB9E: ED 3E C8    >640           SBC   MEMHI      
E0CBA1: 8D 31 C8    >641           STA   LETTER2    
E0CBA4: D0 07 =CBAD >642           BNE   BNCHBACK   ;IF NOT 0 MUST BE BRANCHING BACKWARD
E0CBA6: 2C 30 C8    >643           BIT   LETTER1     ;IF FORWARD BRANCH LOW BYTE CAN'T BE NEGATIVE
E0CBA9: 30 5E =CC09 >644           BMI   BRNCHOUT   ;IF IT IS THEN BRANCH IS OUT OF RANGE
E0CBAB: 10 09 =CBB6 >645           BPL   OFFSETOK   ;IF OK
                    >646  BNCHBACK                  
E0CBAD: C9 FF       >647           CMP   #$FF       
E0CBAF: D0 58 =CC09 >648           BNE   BRNCHOUT   ;THE MSBYTE MUST BE $00 OR $FF
E0CBB1: 2C 30 C8    >649           BIT   LETTER1     ;IF BRANCHING BACKWARD BYTE CAN'T BE POSITIVE
E0CBB4: 10 53 =CC09 >650           BPL   BRNCHOUT   
                    >651  OFFSETOK                  
E0CBB6: 20 7A CE    >652           JSR   DECMEMLH   ;DEC MEMLOW & MEMHI
E0CBB9: 20 7A CE    >653           JSR   DECMEMLH   
                    >654  
                    >655  * Put the instruction into RAM
                    >656  * Found the proper opcode
                    >657  
E0CBBC: AD 40 C8    >658  FOUNDOP  LDA   OPCODE     
E0CBBF: 20 EC CE    >659           JSR   INITMMV     ;INIT LOWADD W/MEMLOW, STA, LDA, VERIFY
E0CBC2: D0 3E =CC02 >660           BNE   MANOTRAM   ;STORE, Z BIT SET IF VERIFY OK
E0CBC4: 20 6F CE    >661           JSR   BYTESP3     ;DISPLAY CODE BYTE & SPACE
E0CBC7: 20 0F CF    >662           JSR   INCMEMLH   ;INC MEMLOW & MEMHI POINTERS
                    >663  
E0CBCA: AE B0 C9    >664           LDX   MODE        ;MODE IS TIMES 2
E0CBCD: F0 12 =CBE1 >665           BEQ   STOROPER   ;If # mode then use current INLENGTH
                    >666  
E0CBCF: CD 00 C8    >667           CMP   $C800       ;DISABLE EXT RAM
E0CBD2: BD 01 C9    >668           LDA   TABLE3,X   
E0CBD5: CD 00 CF    >669           CMP   $CF00       ;ENABLE EXT RAM
E0CBD8: 29 03       >670           AND   #$03        ;# OF BYTES IN OPERAND
                    >671  
                    >672  * Enter here if assembler directive
E0CBDA: 8D 07 C9    >673  ADRHEX   STA   INLENGTH   ;USED BY STOROPER
E0CBDD: F0 16 =CBF5 >674           BEQ   MANEXT      ;MUST BE IMPLIED
E0CBDF: A2 00       >675           LDX   #0         
                    >676  
                    >677  * Store INLENGTH number of bytes
E0CBE1: BD 30 C8    >678  STOROPER LDA   LETTER1,X  
E0CBE4: 20 EC CE    >679           JSR   INITMMV    
E0CBE7: D0 16 =CBFF >680           BNE   MAERRBY2   ;LOCATION NOT RAM
E0CBE9: 20 6F CE    >681           JSR   BYTESP3     ;DISPLAY ACC & SPACE
E0CBEC: 20 0F CF    >682           JSR   INCMEMLH   
E0CBEF: E8          >683           INX              
E0CBF0: EC 07 C9    >684           CPX   INLENGTH   
E0CBF3: 90 EC =CBE1 >685           BLT   STOROPER   
                    >686  
                    >687  * Disassemble the next instruction
                    >688  
E0CBF5: 20 C6 CF    >689  MANEXT   JSR   TRANSFR3   ;CARRIAGE RETURN
E0CBF8: 0F          >690           DFB   CROUTC      ;code
E0CBF9: 4C 24 CA    >691           JMP   MANOADDR   
                    >692  
E0CBFC: 20 7A CE    >693  MAERRBY3 JSR   DECMEMLH   ;DEC MEMLOW & MEMHI
E0CBFF: 20 7A CE    >694  MAERRBY2 JSR   DECMEMLH   
E0CC02: 20 C6 CF    >695  MANOTRAM JSR   TRANSFR3   ;DISPLAY "**ACCESS ERROR**"
E0CC05: 0C          >696           DFB   DISNOTRMC  ;CODE
E0CC06: 4C F5 CB    >697           JMP   MANEXT     
                    >698  
E0CC09: AD B0 C9    >699  BRNCHOUT LDA   MODE        ;IF REL LONG
E0CC0C: C9 1C       >700           CMP   #$E*2       ;MODE IS TIMES 2
E0CC0E: F0 A6 =CBB6 >701           BEQ   OFFSETOK   
E0CC10: 20 C6 CF    >702           JSR   TRANSFR3   ;DISPLAY "BRANCH OUT OF RANGE"
E0CC13: 04          >703           DFB   DISBROUTC  ;CODE
E0CC14: 20 7A CE    >704           JSR   DECMEMLH   
E0CC17: 20 7A CE    >705           JSR   DECMEMLH   
E0CC1A: 4C F5 CB    >706           JMP   MANEXT     
                    >707  
                    >708  *****************************************
                    >709  *   DISASM
                    >710  * Disassemble the current instruction.
                    >711  * MEMLOW & MEMHI contain the program counter lo & hi bytes
                    >712  * MEMPBR contains the program bank register.
                    >713  *****************************************
                    >714  
                    >715  * Use current MEMPBR
                    >716  
E0CC1D: 20 C6 CF    >717  DISASM   JSR   TRANSFR3   ;MEM DISPLAY
E0CC20: 19          >718           DFB   DSMEMCOLC  ;code
E0CC21: A2 00       >719           LDX   #0         
E0CC23: A0 00       >720           LDY   #0         
E0CC25: 20 45 CF    >721           JSR   GETBYTE     ;GET OPCODE
E0CC28: 8D 40 C8    >722           STA   OPCODE     
E0CC2B: A8          >723           TAY              ;USED AS POINTER FOR TABLE3
E0CC2C: CD 00 C8    >724           CMP   $C800       ;DISABLE EXT RAM
E0CC2F: B9 01 C8    >725           LDA   TABLE2,Y   ;INSTRUCTIONS ADDRESS MODE & PC TYPE
E0CC32: CD 00 CF    >726           CMP   $CF00       ;ENABLE EXT RAM
E0CC35: 29 60       >727           AND   #$60        ;ISOLATE PC TYPE
E0CC37: F0 14 =CC4D >728           BEQ   TYPEOK      ;IF 6502 MUST BE OK
E0CC39: C9 20       >729           CMP   #$20        ;IS IT 65C02 INSTRUCTION?
E0CC3B: D0 08 =CC45 >730           BNE   CHK816      ;IF NO, MUST BE 816
E0CC3D: AD 23 C8    >731           LDA   CMOSFLAG   ;IS THE 65C02 ALLOWED?
E0CC40: D0 0B =CC4D >732           BNE   TYPEOK      ;IF NOT RESTRICTED TO 65C02, IT IS OK
E0CC42: 4C 1D CE    >733           JMP   MAKENOP     ;INVALID INSTRUCTION ???
E0CC45: 2C 23 C8    >734  CHK816   BIT   CMOSFLAG   ;IS 65816 ALLOWED?
E0CC48: 70 03 =CC4D >735           BVS   TYPEOK      ;IF YES
E0CC4A: 4C 1D CE    >736           JMP   MAKENOP     ;INVALID INSTRUCTION ???
                    >737  
E0CC4D: CD 00 C8    >738  TYPEOK   CMP   $C800       ;DISABLE EXT RAM
E0CC50: B9 01 C8    >739           LDA   TABLE2,Y   ;GET ADD. MODE & VALID PC INFO
E0CC53: CD 00 CF    >740           CMP   $CF00       ;ENABLE EXT RAM
E0CC56: 29 1F       >741           AND   #$1F        ;LEAVE ONLY ADD. MODE INFO
E0CC58: 0A          >742           ASL              ; TIME 2
E0CC59: A8          >743           TAY              ;ADDRESS MODE TIMES 2 (OFFSET TO TABLE3)
E0CC5A: 8D B0 C9    >744           STA   MODE       
E0CC5D: CD 00 C8    >745           CMP   $C800       ;DISABLE EXT RAM
E0CC60: B9 01 C9    >746           LDA   TABLE3,Y   ;GET # OF BYTES & DISPLAY INFO
E0CC63: CD 00 CF    >747           CMP   $CF00       ;ENABLE EXT RAM
E0CC66: 29 03       >748           AND   #$03        ;GET # OF BYTES IN INSTRUCTION
E0CC68: AA          >749           TAX              
E0CC69: 98          >750           TYA              ;TEST FOR # MODE Y=0?
E0CC6A: D0 1F =CC8B >751           BNE   SVNUMBYT   ;IF NOT
                    >752  *8 OR 16 BIT
E0CC6C: 2C 1B C9    >753           BIT   EMULATE     ;IS 816 MODE ON
E0CC6F: 30 1A =CC8B >754           BMI   SVNUMBYT   ;IF NO THEN 8 BIT
E0CC71: AD 40 C8    >755           LDA   OPCODE     
E0CC74: 29 0F       >756           AND   #$0F       
E0CC76: C9 09       >757           CMP   #$09        ;IS OPCODE ACCUMULATOR INSTRUCTION
E0CC78: D0 09 =CC83 >758           BNE   CHK16X      ;IF NO, CHECK FOR 16 BIT INDEX
                    >759  * Check for 16 bit data
E0CC7A: A9 20       >760           LDA   #$20       
E0CC7C: 2C 1E C8    >761           BIT   STATUS      ;= 0 IF 16 BIT DATA
E0CC7F: D0 0A =CC8B >762           BNE   SVNUMBYT   ;IF 8 BIT
E0CC81: F0 07 =CC8A >763           BEQ   SIXTEEN     ;IF 16 BIT
E0CC83: A9 10       >764  CHK16X   LDA   #$10       
E0CC85: 2C 1E C8    >765           BIT   STATUS      ;= 0 IF 16 BIT INDEX
E0CC88: D0 01 =CC8B >766           BNE   SVNUMBYT   ;IF 8 BIT
E0CC8A: E8          >767  SIXTEEN  INX              ;16 BIT DATA SO DISPLAY 3 BYTES
                    >768  
                    >769  SVNUMBYT                  
E0CC8B: 8E 09 C9    >770           STX   NUMDISP     ;# OF BYTES TO DISPLAY-1
E0CC8E: A0 00       >771           LDY   #0          ;SET FOR GETBYTE
E0CC90: 8C 41 C8    >772           STY   MLIFLAG     ;0=MLI CALL, MAKE <> 0 IF NOT MLI
E0CC93: 8C 42 C8    >773           STY   P16FLAG    ;0=P16 call, make <> 0 if not
E0CC96: 20 41 CE    >774           JSR   DISPBYTS   ;DISPLAY THE HEX FORM OF INSTRUCTION
                    >775  
                    >776  * Print mnemonic
                    >777  
E0CC99: AE 40 C8    >778           LDX   OPCODE     
                    >779  
                    >780  * Get offset that points to compressed mnemonic
E0CC9C: 20 C6 CF    >781           JSR   TRANSFR3   ;LDA TABLE1,X
E0CC9F: 06          >782           DFB   LTABLE1C   ;CODE
E0CCA0: AA          >783           TAX              
E0CCA1: CD 00 C8    >784           CMP   $C800      
E0CCA4:             >785           MEMORY16         
E0CCA4: C2 20       >785           REP   #$20       
                    >785           <<<              
E0CCA6: BD 35 C9    >786           LDA   MNEMTABL,X ;Get compressed MNEM
E0CCA9: CD 00 CF    >787           CMP   $CF00      
E0CCAC: 8D 0A C9    >788           STA   MNEMCOMP   
E0CCAF:             >789           MEMORY8          
E0CCAF: E2 20       >789           SEP   #$20       
                    >789           <<<              
                    >790  
                    >791  * Unpack the 2 byte mnemonic & display
                    >792  
E0CCB1: A2 03       >793           LDX   #3         
E0CCB3: AD 0A C9    >794  UNPACK   LDA   MNEMCOMP   
E0CCB6: 4A          >795           LSR              
E0CCB7: 4A          >796           LSR              
E0CCB8: 29 1F       >797           AND   #%00011111 ;LETTER
E0CCBA: 18          >798           CLC              
E0CCBB: 69 C0       >799           ADC   #$C0       
E0CCBD: 20 75 CE    >800           JSR   COUT3       ;
E0CCC0: 20 33 CF    >801           JSR   LEFT5      ;SHIFT MNEMCOMP LEFT 5 TIMES
E0CCC3: CA          >802           DEX              
E0CCC4: D0 ED =CCB3 >803           BNE   UNPACK     
                    >804  
E0CCC6: A9 A0       >805           LDA   #$A0       
E0CCC8: 20 75 CE    >806           JSR   COUT3       ;SPACE
                    >807  
                    >808  * Display the rest of the instruction
E0CCCB: AC B0 C9    >809           LDY   MODE        ;GET OFFSET TO TABLE3
E0CCCE: CD 00 C8    >810           CMP   $C800       ;DISABLE EXT RAM
E0CCD1: B9 02 C9    >811           LDA   TABLE3+1,Y ;get the 2nd byte of display info
E0CCD4: 8D A3 C9    >812           STA   TEMP+2      ;save for later
E0CCD7: B9 01 C9    >813           LDA   TABLE3,Y   ;GET THE 1ST BYTE OF DISPLAY INFO
E0CCDA: CD 00 CF    >814           CMP   $CF00       ;ENABLE EXT RAM
E0CCDD: 0A          >815           ASL              
E0CCDE: 0A          >816           ASL              
E0CCDF: A2 00       >817           LDX   #0         
                    >818  NEXTSYMB                  
E0CCE1: 0A          >819           ASL              
E0CCE2: 48          >820           PHA              ;SAVE
E0CCE3: 90 0B =CCF0 >821           BCC   NOSYMBOL   
                    >822  GETSYMB                   
E0CCE5: BD 01 CA    >823           LDA   TABLE4,X   ;GET THE SYMBOL
E0CCE8: F0 0C =CCF6 >824           BEQ   SYMBEND     ;0=STOP
E0CCEA: 20 75 CE    >825           JSR   COUT3       ;DISPLAY SYMBOL
E0CCED: E8          >826           INX              
E0CCEE: D0 F5 =CCE5 >827           BNE   GETSYMB    
                    >828  NOSYMBOL                  
E0CCF0: E8          >829           INX              
E0CCF1: BD 01 CA    >830           LDA   TABLE4,X   
E0CCF4: D0 FA =CCF0 >831           BNE   NOSYMBOL   
E0CCF6: E8          >832  SYMBEND  INX              
E0CCF7: 68          >833           PLA              
E0CCF8: E0 06       >834           CPX   #6          ;DISPLAY ADDRESS?
E0CCFA: D0 03 =CCFF >835           BNE   :NO        ;IF NO
E0CCFC: 4C A8 CD    >836           JMP   DISPADDR   ;YES
E0CCFF: E0 13       >837  :NO      CPX   #19         ;DISPLAY EFFECTIVE ADD.?
E0CD01: 90 DE =CCE1 >838           BLT   NEXTSYMB   ;IF NO
E0CD03: 0A          >839           ASL              ;DISPLAY EFFECTIVE ADD?
E0CD04: 90 24 =CD2A >840           BCC   :CHKMLI     ;IF NO
E0CD06: 48          >841           PHA              
E0CD07: A9 A0       >842           LDA   #$A0       
E0CD09: 20 75 CE    >843           JSR   COUT3       ;
E0CD0C: A9 FB       >844           LDA   #"{"       
E0CD0E: 20 75 CE    >845           JSR   COUT3       ;
E0CD11: 68          >846           PLA              
E0CD12: 0A          >847           ASL              ;EFFECTIVE ADDRESS?
E0CD13: 90 44 =CD59 >848           BCC   RELADDRS   ;IF NO
E0CD15: 20 C6 CF    >849           JSR   TRANSFR3   ;CALC EFFECTIVE ADDRESS
E0CD18: 3C          >850           DFB   CALCEFFC   ;code
                    >851  
                    >852  * Display effective address
E0CD19: AD D0 C8    >853           LDA   EFFADRS+2  
E0CD1C: 20 C6 CF    >854           JSR   TRANSFR3   
E0CD1F: 37          >855           DFB   PRBYTEC     ;code
E0CD20: AD CF C8    >856           LDA   EFFADRS+1  
E0CD23: AE CE C8    >857           LDX   EFFADRS    
E0CD26: 20 C6 CF    >858           JSR   TRANSFR3   
E0CD29: 3F          >859           DFB   PRNTAXC     ;code
                    >860  
                    >861  *------------------
                    >862  * Check for MLI call
                    >863  
E0CD2A: AD 42 C8    >864  :CHKMLI  LDA   P16FLAG    ;was this a P16 call?
E0CD2D: F0 05 =CD34 >865           BEQ   :DOP16     ;if yes
E0CD2F: AD 41 C8    >866  :CKMLI   LDA   MLIFLAG     ;WAS THIS AN MLI CALL ?
E0CD32: D0 22 =CD56 >867           BNE   :ENDDIS     ;IF NO
E0CD34: 20 C6 CF    >868  :DOP16   JSR   TRANSFR3   ;DO <CR>
E0CD37: 0F          >869           DFB   CROUTC      ;code
E0CD38: A2 08       >870           LDX   #8         
E0CD3A: 20 6A CE    >871           JSR   SPACES      ;8 SPACES
E0CD3D: A2 02       >872           LDX   #2          ;# OF BYTES-1, preset for MLI
E0CD3F: A0 03       >873           LDY   #3         ;point at MLI stuff
E0CD41: AD 42 C8    >874           LDA   P16FLAG    ;was this a P16 call?
E0CD44: D0 04 =CD4A >875           BNE   :CONTMLI   ;if no
E0CD46: E8          >876           INX              
E0CD47: E8          >877           INX              
E0CD48: E8          >878           INX              ;set for 6 bytes of P16 stuff
E0CD49: C8          >879           INY              ;point at P16 stuff
E0CD4A: 20 41 CE    >880  :CONTMLI JSR   DISPBYTS   ;DISPLAY THE MLI or P16 PARAMETER DATA
                    >881  * STZ MLIFLAG ;CLEAR flag
                    >882  * LDX #4
                    >883  * JSR SPACES  ;4 SPACES, RETURNS WITH X=0
                    >884  * LDY #3
                    >885  * JSR GETBYTE
                    >886  * JSR TRANSFR3 ;PRINT MLI CODE BYTE
                    >887  * DFB PRBYTEC
                    >888  * LDA #$A0
                    >889  * JSR COUT3  ;SPACE
                    >890  * INY
                    >891  * JSR GETBYTE
                    >892  * TAX
                    >893  * INY
                    >894  * JSR GETBYTE
                    >895  * JSR TRANSFR3 ;PRINT MLI ADDRESS
                    >896  * DFB PRNTAXC
E0CD4D: AE 09 C9    >897           LDX   NUMDISP    
E0CD50: E8          >898           INX              
E0CD51: E8          >899           INX              ;INC NUMDISP TO REFLECT
E0CD52: E8          >900           INX              ;3 XTRA BYTES OF MLI
E0CD53: 8E 09 C9    >901           STX   NUMDISP    
E0CD56: 4C 35 CE    >902  :ENDDIS  JMP   ENDDISAS   
                    >903  
                    >904  * Not effective address so indicate relative offset
                    >905  
E0CD59: A9 00       >906  RELADDRS LDA   #0         
E0CD5B: 8D A2 C9    >907           STA   TEMP+1     
E0CD5E: AC 09 C9    >908           LDY   NUMDISP     ;# BYTES IN INSTRUCTION-1
E0CD61: 20 45 CF    >909           JSR   GETBYTE     ;LOAD HI ORDER BYTE OF OFFSET. OP LO HI
E0CD64: 8D A1 C9    >910           STA   TEMP       
E0CD67: 88          >911           DEY              
E0CD68: F0 06 =CD70 >912           BEQ   :ONEBYT    
E0CD6A: 20 45 CF    >913           JSR   GETBYTE     ;GET LO BYTE OF OFFSET
E0CD6D: 8D A2 C9    >914           STA   TEMP+1     
E0CD70: AD A1 C9    >915  :ONEBYT  LDA   TEMP        ;GET HI BYTE OR ONLY BYTE
E0CD73: 10 15 =CD8A >916           BPL   :POSOFF     ;POSITIVE OFFSET
                    >917  
                    >918  * Take 2'S compliment of neg offset
E0CD75: A9 00       >919           LDA   #0         
E0CD77: 38          >920           SEC              
E0CD78: ED A2 C9    >921           SBC   TEMP+1      ;TEMP+1 is 0 for 1 byte offset and
E0CD7B: 8D A2 C9    >922           STA   TEMP+1      ; will not affect the carry flag
E0CD7E: A9 00       >923           LDA   #0         
E0CD80: ED A1 C9    >924           SBC   TEMP       
E0CD83: 8D A1 C9    >925           STA   TEMP        ;2'S COMP. FINISHED
E0CD86: A9 AD       >926           LDA   #"-"       
E0CD88: D0 02 =CD8C >927           BNE   :SIGN      
                    >928  
E0CD8A: A9 AB       >929  :POSOFF  LDA   #"+"       
E0CD8C: 20 75 CE    >930  :SIGN    JSR   COUT3       ;DISPLAY SIGN OF OFFSET
E0CD8F: AD A1 C9    >931           LDA   TEMP       
E0CD92: 20 C6 CF    >932           JSR   TRANSFR3   ;PRINT ACC AS 2 HEX DIGITS
E0CD95: 37          >933           DFB   PRBYTEC     ;CODE
E0CD96: 98          >934           TYA              ;TEST Y
E0CD97: F0 07 =CDA0 >935           BEQ   :OFFEND     ;ONE BYTE OFFSET
E0CD99: AD A2 C9    >936           LDA   TEMP+1      ;LOW BYTE OF OFFSET
E0CD9C: 20 C6 CF    >937           JSR   TRANSFR3   ;DISPLAY AS 2 HEX DIGITS
E0CD9F: 37          >938           DFB   PRBYTEC     ;CODE
E0CDA0: A9 FD       >939  :OFFEND  LDA   #"}"       
E0CDA2: 20 75 CE    >940           JSR   COUT3       ;
E0CDA5: 4C 35 CE    >941           JMP   ENDDISAS   ;END OF DISASSEMBLY
                    >942  
                    >943  
                    >944  * Display the address bytes of the instruction (E.G. LDA #$XX)
                    >945  
E0CDA8: 0A          >946  DISPADDR ASL              ;TEST BIT 2 FROM TABLE 3 (RELATIVE ADDR.?)
E0CDA9: B0 3F =CDEA >947           BCS   DISPASIS   ;DISPLAY ADDRESS AS IS
                    >948  
                    >949  *-------------------------------------------------
                    >950  * Calculate relative address
                    >951  * Our PCHI & PCLO is pointing at the current instruciton, but a branch
                    >952  * offset works off the following instructions PC. So add the number of
                    >953  * bytes in the branch instruction, (2 or 3), to the offset
                    >954  
E0CDAB: 9C A2 C9    >955           STZ   TEMP+1      ;HI BYTE
E0CDAE: AC 09 C9    >956           LDY   NUMDISP     ;# BYTES IN INSTRUCTION-1
                    >957  
                    >958  * Get 1 byte offset or hi byte of 2 byte offset
E0CDB1: 20 45 CF    >959           JSR   GETBYTE    
E0CDB4: C0 02       >960           CPY   #2         
E0CDB6: F0 09 =CDC1 >961           BEQ   TWOBYTE    
E0CDB8: 8D A1 C9    >962           STA   TEMP        ;ONLY USED FOR 8 BIT OFFSET
E0CDBB: 09 00       >963           ORA   #00         ;SET FLAGS
E0CDBD: 10 05 =CDC4 >964           BPL   NOEXTEND   ;IF POS # DO NOT SIGN EXTEND
E0CDBF: A9 FF       >965           LDA   #$FF       
E0CDC1: 8D A2 C9    >966  TWOBYTE  STA   TEMP+1      ;SIGN EXTEND 8 BIT NEG OFFSET, OR HI BYTE
E0CDC4: 88          >967  NOEXTEND DEY              ;DEC. INSTRUCTION POINTER
E0CDC5: F0 06 =CDCD >968           BEQ   ONEOFFST   ;IF NOT BYTE OFFSET
E0CDC7: 20 45 CF    >969           JSR   GETBYTE    
E0CDCA: 8D A1 C9    >970           STA   TEMP       
                    >971  
                    >972  * Add the number of bytes in the branch instruction
                    >973  * to the offset. Add offset to PC & display address
                    >974  
E0CDCD: 38          >975  ONEOFFST SEC              ;ADD IN CARRY BECAUSE NUMDISP IS 1 LESS
E0CDCE: AD A1 C9    >976           LDA   TEMP        ;THAN # OF BYTES
E0CDD1: 6D 09 C9    >977           ADC   NUMDISP    
E0CDD4: 08          >978           PHP              ;SAVE CARRY
E0CDD5: 18          >979           CLC              
E0CDD6: 6D 3D C8    >980           ADC   MEMLOW      ;ADD TO PC
E0CDD9: AA          >981           TAX              
E0CDDA: AD 3E C8    >982           LDA   MEMHI      
E0CDDD: 69 00       >983           ADC   #0          ;ADD IN CARRY FROM MEMLOW IF ANY
E0CDDF: 28          >984           PLP              ;GET CARRY FROM NUMDISP IF ANY
E0CDE0: 6D A2 C9    >985           ADC   TEMP+1      ;ADD IN HI BYTE OFFSET
E0CDE3: 20 C6 CF    >986           JSR   TRANSFR3   ;DISPLAY ADDRESS
E0CDE6: 3F          >987           DFB   PRNTAXC     ;CODE
E0CDE7: 4C 14 CE    >988           JMP   T3BYTE2     ;GET BYTE2 FROM TABLE3
                    >989  
                    >990  * Display the address bytes as is
                    >991  
E0CDEA: AC 09 C9    >992  DISPASIS LDY   NUMDISP     ;# BYTES IN INSTRUCTION-1
E0CDED: F0 25 =CE14 >993           BEQ   T3BYTE2     ;ONLY 1 BYTE INSTRUCTION
                    >994  
E0CDEF: AD A3 C9    >995           LDA   TEMP+2      ;get TABLE3 2nd byte
E0CDF2: 6A          >996           ROR              
E0CDF3: 6A          >997           ROR              ;bit7 = 0 = no effective address or relative
E0CDF4: 48          >998           PHA              ;save effective address flag
E0CDF5: 10 0B =CE02 >999           BPL   DISPAS2     ;don't clear effective address
                    >1000 
                    >1001 * Clear EFFADRS
E0CDF7: A2 02       >1002          LDX   #2         
E0CDF9: 9E CE C8    >1003 :NEXT    STZ   EFFADRS,X  
E0CDFC: CA          >1004          DEX              
E0CDFD: D0 FA =CDF9 >1005          BNE   :NEXT      
                    >1006 
E0CDFF: AC 09 C9    >1007          LDY   NUMDISP    
E0CE02: 20 45 CF    >1008 DISPAS2  JSR   GETBYTE     ;GET THE HIGHEST ORDER ADDRESS BYTE
E0CE05: FA          >1009          PLX              ;get effective address flag
E0CE06: DA          >1010          PHX              
E0CE07: 10 03 =CE0C >1011          BPL   :NOEFF      ;if no effective address or relative
E0CE09: 99 CD C8    >1012          STA   EFFADRS-1,Y ;SAVE FOR EFFECTIVE ADDRS.
E0CE0C: 20 C6 CF    >1013 :NOEFF   JSR   TRANSFR3   ;PRINT THE BYTE
E0CE0F: 37          >1014          DFB   PRBYTEC     ;CODE
E0CE10: 88          >1015          DEY              
E0CE11: D0 EF =CE02 >1016          BNE   DISPAS2     ;NEXT BYTE
E0CE13: FA          >1017          PLX              ;restore stack
                    >1018 
                    >1019 * retrieve 2nd byte of TABLE3 display info
                    >1020 
E0CE14: AD A3 C9    >1021 T3BYTE2  LDA   TEMP+2      ;get 2nd byte of display info
E0CE17: 0A          >1022          ASL              ;BIT 7 EMPTY
E0CE18: A2 06       >1023          LDX   #6          ;RESET X
E0CE1A: 4C E1 CC    >1024          JMP   NEXTSYMB   ;CONTINUE DISPLAYING INSTRUCTION
                    >1025 
                    >1026 * Display "???"
                    >1027 
E0CE1D: 98          >1028 MAKENOP  TYA              ;OPCODE
E0CE1E: 20 C6 CF    >1029          JSR   TRANSFR3   ;DISPLAY OPCODE
E0CE21: 37          >1030          DFB   PRBYTEC     ;code
E0CE22: A2 0A       >1031          LDX   #10        
E0CE24: 20 C6 CF    >1032          JSR   TRANSFR3   ;LINE UP
E0CE27: 27          >1033          DFB   PRBL2C      ;code
E0CE28: A2 03       >1034          LDX   #3         
E0CE2A: A9 BF       >1035 PRINT?   LDA   #"?"       
E0CE2C: 20 75 CE    >1036          JSR   COUT3       ;
E0CE2F: CA          >1037          DEX              
E0CE30: D0 F8 =CE2A >1038          BNE   PRINT?     
E0CE32: 8E 09 C9    >1039          STX   NUMDISP     ;# OF BYTES - 1
                    >1040 
                    >1041 *---------------------------------
                    >1042 *  End disassemble routine
                    >1043 *---------------------------------
                    >1044 
                    >1045 ENDDISAS                  
E0CE35: 20 C6 CF    >1046          JSR   TRANSFR3   ;RETURN
E0CE38: 0F          >1047          DFB   CROUTC      ;code
E0CE39: 60          >1048          RTS              ;END OF DISASSEMBLY
                    >1049 
                    >1050 **************************************************
                    >1051 * SUBROUTINES
                    >1052 **************************************************
                    >1053 
                    >1054 *-----------------------------------
                    >1055 * Display the hex form of the instruction.
                    >1056 * Set MLIFLAG to non 0 if not JSR $BF00
                    >1057 * Enter with X=number of bytes-1
                    >1058 *
                    >1059 * Spaces entry point displays X number of spaces.
                    >1060 *-----------------------------------
                    >1061 
                    >1062 * MLI code for comparison
E0CE3A: 20 00 BF    >1063 MLICODE  JSR   $BF00      
E0CE3D: 22 A8 00 E1 >1064 P16CODE  JSL   $E100A8    
                    >1065 
E0CE41: 20 45 CF    >1066 DISPBYTS JSR   GETBYTE    
E0CE44: D9 3A CE    >1067          CMP   MLICODE,Y  ;DOES IT MATCH MLI CALL?
E0CE47: F0 03 =CE4C >1068          BEQ   :MAYBE     ;THIS PART MATCHES
E0CE49: EE 41 C8    >1069          INC   MLIFLAG     ;NOT AN MLI CALL
E0CE4C: D9 3D CE    >1070 :MAYBE   CMP   P16CODE,Y  ;does it match P16 call?
E0CE4F: F0 03 =CE54 >1071          BEQ   :MAYBE16   ;this part matches
E0CE51: EE 42 C8    >1072          INC   P16FLAG    ;not a P16 call
E0CE54: 20 6F CE    >1073 :MAYBE16 JSR   BYTESP3     ;PRINT ACC AS HEX BYTE & SPACE
E0CE57: C8          >1074          INY              
E0CE58: CA          >1075          DEX              
E0CE59: 10 E6 =CE41 >1076          BPL   DISPBYTS   
E0CE5B: AE 09 C9    >1077          LDX   NUMDISP     ;# OF BYTES DISPLAYED-1
E0CE5E: E8          >1078          INX              
                    >1079 
                    >1080 * Print proper number of spaces so all mnemonics line up
E0CE5F: A9 0C       >1081          LDA   #12        
E0CE61: 38          >1082 :LOOP    SEC              
E0CE62: E9 03       >1083          SBC   #3         
E0CE64: F0 08 =CE6E >1084          BEQ   DBYTEEND   ;NO SPACES
E0CE66: CA          >1085          DEX              
E0CE67: D0 F8 =CE61 >1086          BNE   :LOOP      
E0CE69: AA          >1087          TAX              ;# OF SPACES TO PRINT
                    >1088 
                    >1089 *-------------------------------
                    >1090 * Alternate entry point
                    >1091 
E0CE6A: 20 C6 CF    >1092 SPACES   JSR   TRANSFR3   ;PRINT X NUMBER OF SPACES
E0CE6D: 27          >1093          DFB   PRBL2C      ;CODE
                    >1094 DBYTEEND                  
E0CE6E: 60          >1095          RTS              
                    >1096 
                    >1097 *--------------------------------
                    >1098 * Print the ACC as 1 hex byte followed by 1 space
                    >1099 
E0CE6F: 20 C6 CF    >1100 BYTESP3  JSR   TRANSFR3   ;
E0CE72: 37          >1101          DFB   PRBYTEC     ;CODE
E0CE73: A9 A0       >1102          LDA   #$A0        ;SPACE
                    >1103 
                    >1104 *-----------------------------
                    >1105 
E0CE75: 20 C6 CF    >1106 COUT3    JSR   TRANSFR3   
E0CE78: 07          >1107          DFB   COUTC      
E0CE79: 60          >1108          RTS              
                    >1109 
                    >1110 *------------------------------
                    >1111 * Decrement MEMLOW by 1
                    >1112 
E0CE7A:             >1113 DECMEMLH MEMORY16         
E0CE7A: C2 20       >1113          REP   #$20       
                    >1113          <<<              
E0CE7C: CE 3D C8    >1114          DEC   MEMLOW     
E0CE7F:             >1115          MEMORY8          
E0CE7F: E2 20       >1115          SEP   #$20       
                    >1115          <<<              
E0CE81: 60          >1116          RTS              
                    >1117 
                    >1118 * FINDOPCD subroutine
                    >1119 * Compare the operand of the input instruction with the operand of each
                    >1120 * mode in TABLE 3. If a match is found then check TABLE 2 to see if
                    >1121 * the mnemonic is available in that mode. If it is then save mode in
                    >1122 * MODE & opcode in OPCODE
                    >1123 
E0CE82: A2 32       >1124 FINDOPCD LDX   #TBL3END-TABLE3-2 ;1ST BYTE OF LAST MODE
E0CE84: CD 00 C8    >1125 NEWOPER  CMP   $C800      
E0CE87: BD 02 C9    >1126          LDA   TABLE3+1,X ;GET BYTE2 OF OPCODE FLAGS
E0CE8A: CD 00 CF    >1127          CMP   $CF00      
E0CE8D: 29 FC       >1128          AND   #$FC        ;IGNORE BITS 0 & 1
E0CE8F: CD 75 C8    >1129          CMP   OPERAND+1  ;DOES INPUT OPERAND MATCH?
E0CE92: D0 24 =CEB8 >1130          BNE   NEXTOPER   ;IF NO
E0CE94: AD 74 C8    >1131          LDA   OPERAND    
E0CE97: 29 3F       >1132          AND   #$3F        ;IGNORE BITS 6 & 7
E0CE99: CD 00 C8    >1133          CMP   $C800      
E0CE9C: DD 01 C9    >1134          CMP   TABLE3,X   ;DO MODES MATCH?
E0CE9F: 8D 00 CF    >1135          STA   $CF00      
E0CEA2: D0 14 =CEB8 >1136          BNE   NEXTOPER   ;IF NO
                    >1137 
                    >1138 * Operand modes match. Now see if NMEM is available in this mode.
                    >1139 
E0CEA4: 8E B0 C9    >1140          STX   MODE        ;SAVE POSSIBLE (MODE x 2)
E0CEA7: A2 00       >1141          LDX   #$0        
E0CEA9: 20 C6 CF    >1142 POSIBLOP JSR   TRANSFR3   ;LDA TABLE1,X
E0CEAC: 06          >1143          DFB   LTABLE1C   ;CODE
E0CEAD: CD 40 C8    >1144          CMP   OPCODE      ;COMPARE WITH MNEMONIC THAT WAS SAVED HERE
E0CEB0: F0 0C =CEBE >1145          BEQ   CHKMODE    
E0CEB2: E8          >1146 NEXTOPCD INX              
E0CEB3: D0 F4 =CEA9 >1147          BNE   POSIBLOP   
                    >1148 
                    >1149 * Try next operand from TABLE3
                    >1150 
E0CEB5: AE B0 C9    >1151          LDX   MODE        ;RESTORE X
                    >1152 NEXTOPER                  
E0CEB8: CA          >1153          DEX              
E0CEB9: CA          >1154          DEX              ;GOTO NEXT ENTRY IN TABLE 3
E0CEBA: 10 C8 =CE84 >1155          BPL   NEWOPER    
                    >1156 
                    >1157 * Opcode not found
                    >1158 
E0CEBC: 38          >1159 INVPROC  SEC              ;SET ERROR CONDITION
E0CEBD: 60          >1160          RTS              
                    >1161 
                    >1162 * Found possible op code, see if modes match
                    >1163 
E0CEBE: CD 00 C8    >1164 CHKMODE  CMP   $C800       ;DISABLE EXT RAM
E0CEC1: BD 01 C8    >1165          LDA   TABLE2,X   ;GET MODE INFO FOR THIS OPCODE
E0CEC4: CD 00 CF    >1166          CMP   $CF00       ;ENABLE EXT RAM
E0CEC7: 29 1F       >1167          AND   #$1F        ;STRIP UNUSED STUFF
E0CEC9: 0A          >1168          ASL              ;TIMES 2 BECAUSE MODE IS TIMES 2
E0CECA: CD B0 C9    >1169          CMP   MODE        ;DO MODES MATCH, IF SO FOUND OPCODE
E0CECD: D0 E3 =CEB2 >1170          BNE   NEXTOPCD   ;IF NO
                    >1171 
                    >1172 * Found opcode. Is it processor type that is allowed.
                    >1173 
E0CECF: 8E 40 C8    >1174          STX   OPCODE      ;SAVE
E0CED2: CD 00 C8    >1175          CMP   $C800       ;DISABLE EXT RAM
E0CED5: BD 01 C8    >1176          LDA   TABLE2,X   ;GET INFO ON THIS OPCODE
E0CED8: CD 00 CF    >1177          CMP   $CF00       ;ENABLE EXT RAM
E0CEDB: 29 60       >1178          AND   #$60        ;STRIP ALL BUT PROCESSOR INFO
E0CEDD: F0 0B =CEEA >1179          BEQ   PROCESOK   ;IF 00=6502, MUST BE OK
E0CEDF: 2C 23 C8    >1180          BIT   CMOSFLAG   ;IS 65816 ALLOWED?
E0CEE2: 70 06 =CEEA >1181          BVS   PROCESOK   ;IF YES, MUST BE OK
E0CEE4: 10 D6 =CEBC >1182          BPL   INVPROC     ;IF 6502 ONLY, THEN INVALID
E0CEE6: C9 20       >1183          CMP   #$20        ;IS INSTR 65C02?
E0CEE8: D0 D2 =CEBC >1184          BNE   INVPROC     ;IF NO, INVALID
                    >1185 
                    >1186 * Opcode is allowed
                    >1187 
E0CEEA: 18          >1188 PROCESOK CLC              ;CLEAR ERROR FLAG
E0CEEB: 60          >1189          RTS              
                    >1190 
                    >1191 *-------------------------------------------------
                    >1192 * Init LOWADD & HIADD with MEMLOW & MEMHI
                    >1193 * Store the contents of the ACC. & verify that it stored
                    >1194 * properely. Returns with Z bit set if verified OK.
                    >1195 
            =E0CEEC >1196 INITMMV  EQU   *          
E0CEEC: AC 08 C9    >1197          LDY   MEMPBR     
E0CEEF: 8C 3C C8    >1198          STY   DBRDDT     ;BANK TO ACCESS
E0CEF2:             >1199          INDEX16          
E0CEF2: C2 10       >1199          REP   #$10       
                    >1199          <<<              
E0CEF4: AC 3D C8    >1200          LDY   MEMLOW     
E0CEF7: 8C 18 C9    >1201          STY   LOWADD     
E0CEFA:             >1202          INDEX8           
E0CEFA: E2 10       >1202          SEP   #$10       
                    >1202          <<<              
E0CEFC: 48          >1203          PHA              
E0CEFD: A0 00       >1204          LDY   #0         
E0CEFF: 20 C6 CF    >1205          JSR   TRANSFR3   ;STA LOWADD,Y
E0CF02: 08          >1206          DFB   STAINDYC   ;CODE
E0CF03: 20 C6 CF    >1207          JSR   TRANSFR3   ;LDA LOWADD,Y
E0CF06: 00          >1208          DFB   LDAINDYC   ;CODE
E0CF07: 8D A1 C9    >1209          STA   TEMP       
E0CF0A: 68          >1210          PLA              ;DID IT STORE PROPERELY?
E0CF0B: CD A1 C9    >1211          CMP   TEMP       
E0CF0E: 60          >1212          RTS              
                    >1213 
                    >1214 * Increment MEMLOW & MEMHI pointer by 1
                    >1215 
E0CF0F:             >1216 INCMEMLH MEMORY16         
E0CF0F: C2 20       >1216          REP   #$20       
                    >1216          <<<              
E0CF11: EE 3D C8    >1217          INC   MEMLOW      ;INC POINTER
E0CF14:             >1218          MEMORY8          
E0CF14: E2 20       >1218          SEP   #$20       
                    >1218          <<<              
E0CF16: 60          >1219          RTS              
                    >1220 
                    >1221 * Load MEMLOW & MEMHI, carry set on error
                    >1222 
            =E0CF17 >1223 LOADMEM  EQU   *          
E0CF17: 20 C6 CF    >1224          JSR   TRANSFR3   ;CHECK FOR HEX AND READ
E0CF1A: 09          >1225          DFB   CHKREADC   ;CODE
E0CF1B: B0 09 =CF26 >1226          BCS   LOADMRTS   ;CARRY SET FOR ERROR
E0CF1D: 8D 3D C8    >1227          STA   MEMLOW     
E0CF20: AD 31 C8    >1228          LDA   LETTER2     ;LOAD POINTER
E0CF23: 8D 3E C8    >1229          STA   MEMHI      
                    >1230 LOADMRTS                  
E0CF26: 60          >1231          RTS              
                    >1232 
                    >1233 
                    >1234 ***** Pack the mnemonic into 2 bytes *****
                    >1235 *
                    >1236 * MNEMCOMP & MNEMCOMP+1 will contain the compressed mnemonic
                    >1237 * EXAMPLE:  ADC  A= $C1 and with #$1F = %00001
                    >1238 *                D= $C4  "   "     "  = %00100
                    >1239 *                C= $C3  "   "     "  = %00011
                    >1240 *   0 00001 00100 00011 = $0483 compressed form of ADC
                    >1241 
E0CF27: 20 33 CF    >1242 PACKMNEM JSR   LEFT5      
E0CF2A: 29 1F       >1243          AND   #$1F       
E0CF2C: 0D 0B C9    >1244          ORA   MNEMCOMP+1 
E0CF2F: 8D 0B C9    >1245          STA   MNEMCOMP+1 
E0CF32: 60          >1246          RTS              
                    >1247 
E0CF33: 8E 49 C8    >1248 LEFT5    STX   XBUFF      
E0CF36: A2 05       >1249          LDX   #5         
E0CF38: 0E 0B C9    >1250 :LEFT    ASL   MNEMCOMP+1 
E0CF3B: 2E 0A C9    >1251          ROL   MNEMCOMP   
E0CF3E: CA          >1252          DEX              
E0CF3F: D0 F7 =CF38 >1253          BNE   :LEFT      
E0CF41: AE 49 C8    >1254          LDX   XBUFF      
E0CF44: 60          >1255          RTS              
                    >1256 
                    >1257 * Get the byte pointed to by LOWADD,Y
                    >1258 
E0CF45: 20 C6 CF    >1259 GETBYTE  JSR   TRANSFR3   ;GET BYTE FROM PROGRAM RAM
E0CF48: 00          >1260          DFB   LDAINDYC   ;CODE
E0CF49: 60          >1261          RTS              
                    >1262 
                    >1263 *----------------------------------------
                    >1264 *  GETCOM3 - do <CR> & get user command
                    >1265 
E0CF4A: F4 FF C9    >1266 GETCOM3  PEA   GETCOMCR-1 ;address of command
E0CF4D: F4 00 05    >1267          PEA   S_GETCOM   ;segment of command
E0CF50: 4C B7 CF    >1268          JMP   JUMPSEG3   ;goto command
                    >1269 
                    >1270 *----------------------------------------
                    >1271 ***** THIS SEGMENTS GLOBAL SUBROUTINES *****
                    >1272 
                    >1273 SUBTABL3                  
                    >1274 
            =0103   >1275 INITMMVC EQU   *-SUBTABL3*4+3+$100 
E0CF53: EB CE       >1276          DA    INITMMV-1  
                    >1277 
            =010B   >1278 DECMEMLHC EQU  *-SUBTABL3*4+3+$100 
E0CF55: 79 CE       >1279          DA    DECMEMLH-1 
                    >1280 
            =0113   >1281 INCMEMLHC EQU  *-SUBTABL3*4+3+$100 
E0CF57: 0E CF       >1282          DA    INCMEMLH-1 
                    >1283 
            =011B   >1284 LOADMEMC EQU   *-SUBTABL3*4+3+$100 
E0CF59: 16 CF       >1285          DA    LOADMEM-1  
                    >1286 
            =0123   >1287 DISASMC  EQU   *-SUBTABL3*4+3+$100 
E0CF5B: 1C CC       >1288          DA    DISASM-1   
                    >1289 
                    >1290 *****************************************
                    >1291 *  SEGMENT CROSSOVER AREA  *
                    >1292 *****************************************
                    >1293 
            =0034   >1295 S3END    =     $E0CF91-*  
                    >1296          do    nolist     
                    >1297          LST   OFF        
                    >1298          fin              
                    >1299          ERR   *-1/$E0CF91 
E0CF5D: FF FF FF FF >1300          DS    $E0CF91-*,$FF 
                    >1301 
                    >1302 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1303 * Returns with MX = 11, saves registers
                    >1304 
                    >1305 SAVEAXP3                  
E0CF91: 08          >1306          PHP              ;SAVE STATUS
E0CF92:             >1307          MX16             
E0CF92: C2 30       >1307          REP   #$30       
                    >1307          <<<              
E0CF94: 8E 63 C8    >1308          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1309          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1310          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1311          MX8              
E0CF9D: E2 30       >1311          SEP   #$30       
                    >1311          <<<              
E0CF9F: 68          >1312          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1313          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1314          RTS              
                    >1315 
                    >1316 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1317 * restores registers
                    >1318 
                    >1319 RESTAXP3                  
E0CFA4:             >1320          MEMORY8          
E0CFA4: E2 20       >1320          SEP   #$20       
                    >1320          <<<              
E0CFA6: AD 67 C8    >1321          LDA   PSAVESEG   
E0CFA9: 48          >1322          PHA              
E0CFAA:             >1323          MX16             
E0CFAA: C2 30       >1323          REP   #$30       
                    >1323          <<<              
E0CFAC: AE 63 C8    >1324          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1325          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1326          LDA   ASAVESEG   
E0CFB5: 28          >1327          PLP              
E0CFB6: 60          >1328          RTS              
                    >1329          MX    %11        
                    >1330 
                    >1331 *----------------------------------------
                    >1332 * Do a direct transfer to other segments
                    >1333 
                    >1334 JUMPSEG3                  
E0CFB7: 20 91 CF    >1335          JSR   SAVEAXP3   
E0CFBA: AC 29 C8    >1336          LDY   SLOTN0     
E0CFBD: 68          >1337          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1338          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1339          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1340          JSR   RESTAXP3   ;restore after xfer from other seg
E0CFC5: 60          >1341          RTS              ;pull destination address from stack
                    >1342 
                    >1343 * TRANSFER TO OTHER SEGMENTS
                    >1344 
                    >1345 TRANSFR3                  
                    >1346 
E0CFC6: 20 91 CF    >1347          JSR   SAVEAXP3   
E0CFC9:             >1348          MEMORY16         
E0CFC9: C2 20       >1348          REP   #$20       
                    >1348          <<<              
E0CFCB: 68          >1349          PLA              ;get return address from stack
E0CFCC: 1A          >1350          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1351          PHA              
E0CFCE:             >1352          MEMORY8          
E0CFCE: E2 20       >1352          SEP   #$20       
                    >1352          <<<              
E0CFD0: A9 03       >1353          LDA   #3          ;CURRENT SEG #
E0CFD2: 48          >1354          PHA              
E0CFD3: A0 00       >1355          LDY   #0         
E0CFD5: B3 02       >1356          LDA   (2,S),Y     ;GET CODE BYTE
E0CFD7: 48          >1357          PHA              ;SAVE CODE
E0CFD8: 29 07       >1358          AND   #$07        ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1359          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1360          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1361 * NEW SEGMENT
E0CFE0: 68          >1362          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1363          PEA   RETURN3     ;where to return to
E0CFE4: 29 F8       >1364          AND   #$F8        ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1365          LSR              
E0CFE7: 4A          >1366          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1367 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1368          TAY              
E0CFE9:             >1369          MEMORY16         
E0CFE9: C2 20       >1369          REP   #$20       
                    >1369          <<<              
E0CFEB: B9 53 CF    >1370          LDA   SUBTABL3,Y 
E0CFEE: 48          >1371          PHA              
E0CFEF: 80 B3 =CFA4 >1372          BRA   RESTAXP3   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1373          MX    %11        
                    >1374 
                    >1375 * RETURN HERE FROM SUBROUTINE
                    >1376 
            =E0CFF0 >1377 RETURN3  EQU   *-1        
E0CFF1: 20 91 CF    >1378          JSR   SAVEAXP3   
E0CFF4: 68          >1379          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1380          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1381          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1382          BRA   RESTAXP3   
                    >1383 
E0CFFD: FF FF FF    >1384          DS    \,$FF       ;PUT OBJECT AT NEXT PAGE
                     44            PUT   SEG4       
                    >2    ********************
                    >3    *       SEG4
                    >4    ********************
                    >5    
                    >6    ]segnum  =     #$0400      ;current segment number
                    >7    
                    >8             ORG   $E0C800    
                    >9    
                    >10   *************** MESSAGES *************
                    >11   
                    >12   * Message for SKIP
                    >13   
E0C800: D3 CB C9 D0 >14   MSGSKIP  ASC   "SKIP"     
E0C804: 8D 84       >15            DFB   CR,EOT     
                    >16   
                    >17   * Message for COMDKEY
                    >18   
E0C806: 8D          >19   MSGKEY   DFB   CR         
E0C807: CB C5 D9 A0 >20            ASC   "KEY = "   
E0C80D: 84          >21            DFB   EOT        
                    >22   
                    >23   MSGBROUT                  
E0C80E: 8D          >24            DFB   CR         
E0C80F: CF D5 D4 A0 >25            ASC   "OUT OF RANGE" 
E0C81B: 87 8D 84    >26            DFB   BEL,CR,EOT 
                    >27   
                    >28   MSGNOTRM                  
E0C81E: 8D          >29            DFB   CR         
E0C81F: AA AA C1 C3 >30            ASC   "**ACCESS ERROR**" 
E0C82F: 87 8D 84    >31            DFB   BEL,CR,EOT 
                    >32   
E0C832: 8D          >33   MSGHARD  DFB   CR         
E0C833: C8 C1 D2 C4 >34            ASC   "HARD BREAK" 
E0C83D: 8D 84       >35            DFB   CR,EOT     
                    >36   
E0C83F: 8D          >37   MSGORNG  DFB   CR         
E0C840: CF D5 D4 D3 >38            ASC   "OUTSIDE RANGE LIMITS" 
E0C854: 87 8D 84    >39            DFB   BEL,CR,EOT 
                    >40   
E0C857: 8D          >41   MSGNOAC  DFB   CR         
E0C858: CE CF A0 C1 >42            ASC   "NO ACCESS HALT" 
E0C866: 87 84       >43            DFB   BEL,EOT    
                    >44   
                    >45   * DISPLAY TABLE, FORMAT- ASCII, LOW BYTE OF SWITCH(S) ADDRS
                    >46   
                    >47   DISPTABL                  
E0C868: B1 D4       >48            DFB   "1",$54+$80 
E0C86A: B2 D5       >49            DFB   "2",$55+$80 
E0C86C: B4 8C       >50            DFB   "4",$0C+$80 
E0C86E: B8 8D       >51            DFB   "8",$0D+$80 
E0C870: D4 5F D1    >52            DFB   "T",$5F,$51+$80 
E0C873: C1 8F       >53            DFB   "A",$0F+$80 
E0C875: CE 8E       >54            DFB   "N",$0E+$80 
E0C877: C6 D2       >55            DFB   "F",$52+$80 
E0C879: CD D3       >56            DFB   "M",$53+$80 
E0C87B: CC 56 D0    >57            DFB   "L",$56,$50+$80 
E0C87E: C8 57 D0    >58            DFB   "H",$57,$50+$80 
E0C881: C4 57 50 5E >59            DFB   "D",$57,$50,$5E,$0D+$80 
E0C886: FF          >60            DFB   $FF        
                    >61   
                    >62   ****************************************
                    >63   * BANKTABL is used by BANKCHEK subroutine
                    >64   * to determine which bank the current PC is in.
                    >65   *
                    >66   * PATTERN: AABBCC
                    >67   * AA= Lower limit of PC hi byte
                    >68   * BB= Pattern to look for in MSTATE
                    >69   * CC= BIT=0=Don't care
                    >70   ****************************************
                    >71   
E0C887: 00 00 00    >72            HEX   000000      ;LOWEST LIMIT
                    >73   BANKTABL                  ;MSTATE BIT CONDITION
E0C88A: 00 80 80    >74            HEX   008080      ;7=1
E0C88D: 02 40 40    >75            HEX   024040      ;6=1
E0C890: 04 40 42    >76            HEX   044042      ;6=1 1=0
E0C893: 04 06 06    >77            HEX   040606      ;2=1 1=1
E0C896: 08 40 40    >78            HEX   084040      ;6=1
E0C899: 20 40 60    >79            HEX   204060      ;6=1 5=0
E0C89C: 20 44 44    >80            HEX   204444      ;6=1 2=1
E0C89F: 20 40 42    >81            HEX   204042      ;6=1 1=0
E0C8A2: 20 26 26    >82            HEX   202626      ;5=1 2=1 1=1
E0C8A5: 40 40 40    >83            HEX   404040      ;6=1
E0C8A8: C1 01 01    >84            HEX   C10101      ;0=1
E0C8AB: D0 80 80    >85            HEX   D08080      ;7=1
                    >86   
                    >87   **** EFFECTIVE ADDRESS ROUTINES
                    >88   
E0C8AE: 4C CE       >89   EFFTABL  DA    NOEFF-1     ;MODE  $0       #  --  no eff adrs
E0C8B0: 20 CE       >90            DA    BANKEFF-1  ;MODE  $1       a  --  calc eff bank only
E0C8B2: 6B CE       >91            DA    EFFM2-1     ;MODE  $2      al  --  calc eff bank only
E0C8B4: BD CE       >92            DA    EFFM3-1     ;MODE  $3       d  --  calc eff bank only
E0C8B6: 4C CE       >93            DA    NOEFF-1     ;MODE  $4  i or S  --  no eff adrs
E0C8B8: 7F CE       >94            DA    EFFM5-1     ;MODE  $5   (d),y
E0C8BA: 98 CE       >95            DA    EFFM6-1     ;MODE  $6   [d],y
E0C8BC: 4F CE       >96            DA    EFFM7-1     ;MODE  $7   (d,x)
E0C8BE: C2 CE       >97            DA    EFFM8-1     ;MODE  $8     d,x
E0C8C0: D3 CE       >98            DA    EFFM9-1     ;MODE  $9     d,y
E0C8C2: FC CE       >99            DA    EFFMA-1     ;MODE  $A     a,x
E0C8C4: 62 CE       >100           DA    EFFMB-1     ;MODE  $B    al,x
E0C8C6: D8 CE       >101           DA    EFFMC-1     ;MODE  $C     a,y
E0C8C8: 4C CE       >102           DA    NOEFF-1     ;MODE  $D       r  --  NOT USED
E0C8CA: 4C CE       >103           DA    NOEFF-1     ;MODE  $E      rl  --  NOT USED
E0C8CC: DD CE       >104           DA    EFFMF-1     ;MODE  $F     (a)
E0C8CE: EB CE       >105           DA    EFFM10-1   ;MODE $10     [a]
E0C8D0: 5D CE       >106           DA    EFFM11-1   ;MODE $11     (d)
E0C8D2: 04 CF       >107           DA    EFFM12-1   ;MODE $12     [d]
E0C8D4: 09 CF       >108           DA    EFFM13-1   ;MODE $13   (a,x)
E0C8D6: 72 CE       >109           DA    EFFM14-1   ;MODE $14     d,s
E0C8D8: 77 CE       >110           DA    EFFM15-1   ;MODE $15 (d,s),y
                    >111                            ;MODE $16       s
                    >112                            ;MODE $17     b,b
                    >113                            ;MODE $18       #  --  2 byte only
                    >114                            ;MODE $19       a  --  (JMP, JSR, PEA)
                    >115  
                    >116  ****************************************
                    >117  * THIS POINT MUST BE $CA00 OR ABOVE.
                    >118  ****************************************
                    >119  
                    >120           ERR   *-1/$E0CA00 
E0C8DA: FF FF FF FF >121           DS    $E0CA00-*,$FF 
                    >122  
                    >123  *------------------------------*
                    >124  *  COMDTS
                    >125  *------------------------------*
                    >126  
            =E0CA00 >127  COMDTS   EQU   *          
E0CA00: F0 55 =CA57 >128           BEQ   ERROR4     ;If no parameter
E0CA02: 20 C6 CF    >129           JSR   TRANSFR4   ;CHECK FOR HEX AND READ
E0CA05: 09          >130           DFB   CHKREADC   ;CODE
E0CA06: B0 4F =CA57 >131           BCS   ERROR4     ;IF NOT HEX
E0CA08: 8D 4A C8    >132           STA   SUBTRACE   ;TO HI BYTE FOR (JUMP) VECTOR
E0CA0B:             >133           MEMORY16         
E0CA0B: C2 20       >133           REP   #$20       
                    >133           <<<              
E0CA0D: AD 31 C8    >134           LDA   LETTER2    ;HI BYTE & PBR
E0CA10: 8D 4B C8    >135           STA   SUBTRACE+1 ;TO vector
E0CA13:             >136           MEMORY8          
E0CA13: E2 20       >136           SEP   #$20       
                    >136           <<<              
E0CA15: A9 80       >137           LDA   #$80       
E0CA17: 8D A2 C8    >138           STA   TSFLAG     ;SET FLAG
                    >139  
                    >140  * continue command in segment0
E0CA1A: F4 99 CA    >141           PEA   LTRACEVC-1 ;address of routine
E0CA1D: F4 00 00    >142           PEA   S_LTRACE   ;segment of routine
E0CA20: 4C B7 CF    >143           JMP   JUMPSEG4   ;transfer segments
                    >144  
                    >145  ******************************
                    >146  *  COMD> - SKIP NEXT INSTRUCTION
                    >147  ******************************
                    >148  
                    >149  COMDSKIP                  
E0CA23: 38          >150           SEC              ;ADD EXTRA 1
E0CA24: AD 09 C9    >151           LDA   NUMDISP     ;# BYTES IN CURRENT INST - 1
E0CA27: 6D 1F C8    >152           ADC   PCLO        ;SKIP IT
E0CA2A: 8D 1F C8    >153           STA   PCLO       
E0CA2D: AD 20 C8    >154           LDA   PCHI       
E0CA30: 69 00       >155           ADC   #0          ;ADD CARRY IF ANY
E0CA32: 8D 20 C8    >156           STA   PCHI       
                    >157  
E0CA35: F4 00 C8    >158           PEA   MSGSKIP     ;location of message
E0CA38: 20 FA CA    >159           JSR   WRITE4      ;display it
                    >160  
E0CA3B: 20 C6 CF    >161           JSR   TRANSFR4   ;DISPLAY NEW LOCATION
E0CA3E: 96          >162           DFB   INITDISRC  ;code
E0CA3F: A9 80       >163           LDA   #$80       
E0CA41: 8D 92 C8    >164           STA   TFLAG       ;RESTORE TRACE MODE
E0CA44: 4C 49 CF    >165           JMP   GETCOM4    
                    >166  
                    >167  ******************************
                    >168  *  COMDKEY - SET KEY
                    >169  ******************************
                    >170  
E0CA47: F4 06 C8    >171  COMDKEY  PEA   MSGKEY      ;message location
E0CA4A: 20 FA CA    >172           JSR   WRITE4      ;DISPLAY "KEY = "
                    >173  
E0CA4D: 20 C6 CF    >174           JSR   TRANSFR4   ;READ KEYBOARD
E0CA50: 17          >175           DFB   RDCHARC     ;code
E0CA51: 8D BA C9    >176           STA   KEY         ;SET KEY
E0CA54: 4C 49 CF    >177           JMP   GETCOM4    
                    >178  
E0CA57: A9 04       >179  ERROR4   LDA   #BADPAR     ;ERROR NUMBER
E0CA59: 20 C6 CF    >180           JSR   TRANSFR4   ;DO ERROR
E0CA5C: 2D          >181           DFB   ERRBEEPC   ;code
E0CA5D: 4C 49 CF    >182           JMP   GETCOM4    
                    >183  
                    >184  ******************************
                    >185  *  COMDSS - SET SWITCH
                    >186  ******************************
                    >187  
E0CA60: F0 F5 =CA57 >188  COMDSS   BEQ   ERROR4     
E0CA62: 20 C6 CF    >189           JSR   TRANSFR4   ;READ ADDRESS INTO LETTER 1
E0CA65: 09          >190           DFB   CHKREADC   ;code
E0CA66: B0 EF =CA57 >191           BCS   ERROR4      ;IF NOT VALID
E0CA68: 20 C6 CF    >192           JSR   TRANSFR4   ;RESTORE CURRENT SWITCHES
E0CA6B: 1E          >193           DFB   RESTTEXTC  ;code
                    >194  
                    >195  * Restore aux ram switches, reset to main ram by SETMSTAT
E0CA6C: 20 B3 CA    >196           JSR   RESTAUX    
                    >197  
E0CA6F: AD 16 C0    >198           LDA   ALTZP       ;CURRENT ALTZP STATUS
E0CA72: 8D 79 C8    >199           STA   INDYBUF     ;SAVE
                    >200  * WATCH OUT FOR CX ROM
E0CA75: AD 30 C8    >201           LDA   LETTER1    
E0CA78: C9 06       >202           CMP   #$06        ;TURN CXROM OFF?
E0CA7A: F0 07 =CA83 >203           BEQ   :CXOFF      ;IF YES
E0CA7C: C9 07       >204           CMP   #$07        ;TURN CXROM ON?
E0CA7E: D0 0A =CA8A >205           BNE   :NOTCX      ;IF NO
                    >206  *CXON
E0CA80: 38          >207           SEC              
E0CA81: B0 01 =CA84 >208           BCS   :SETCX     
E0CA83: 18          >209  :CXOFF   CLC              ;CX OFF
E0CA84: 6E 17 C9    >210  :SETCX   ROR   CXSTATUS   ;SET CX
E0CA87: 4C 94 CA    >211           JMP   :SET        ;CONTINUE
                    >212  
E0CA8A: AA          >213  :NOTCX   TAX              
E0CA8B: 9D 00 C0    >214           STA   $C000,X     ;SET SWITCH
E0CA8E: BD 00 C0    >215           LDA   $C000,X     ;NEEDED FOR LANGUAGE CARD SWITCH
E0CA91: BD 00 C0    >216           LDA   $C000,X     ; ditto
                    >217  
                    >218  * Sets AUX ram switches to main ram.
E0CA94: 20 C6 CF    >219  :SET     JSR   TRANSFR4   ;SET MSTATE & CALCULATE BANK
E0CA97: 4E          >220           DFB   SETMPBRC   ;code
E0CA98: 8D 21 C8    >221           STA   PBR        
                    >222  
E0CA9B: 20 C6 CF    >223           JSR   TRANSFR4   ;SAVE NEW SWITCHES
E0CA9E: 2E          >224           DFB   ZPAGSAVEC  ;code
                    >225  
E0CA9F: 2C 25 C8    >226           BIT   OFFFLAG     ;IS DISPLAY TURNED OFF?
E0CAA2: 30 0C =CAB0 >227           BMI   :NOUPDT     ;IF YES, DON'T UPDATE DISPLAY
E0CAA4: 20 C6 CF    >228           JSR   TRANSFR4   ;RESET SCREEN SWITCHES
E0CAA7: 87          >229           DFB   SETSCRNC   ;code
E0CAA8: 20 C6 CF    >230           JSR   TRANSFR4   ;UPDATE DISPLAY
E0CAAB: C7          >231           DFB   DISFMESC   ;code
E0CAAC: 20 C6 CF    >232           JSR   TRANSFR4   ;SET WINDDR
E0CAAF: A6          >233           DFB   WINDDRC     ;code
E0CAB0: 4C 49 CF    >234  :NOUPDT  JMP   GETCOM4    
                    >235  
                    >236  *-------------------------
                    >237  * Restore AUX ram switches. (currently set to main ram)
                    >238  
                    >239  RESTAUX                   
E0CAB3: AD 1C C8    >240           LDA   MSTATE     
E0CAB6: 0A          >241           ASL              
E0CAB7: 10 03 =CABC >242           BPL   :READM      ;IF SET FOR MAIN RAM
E0CAB9: 8D 03 C0    >243           STA   READAUX     ;SET AUX READ
E0CABC: 0A          >244  :READM   ASL              
E0CABD: 10 03 =CAC2 >245           BPL   :WRITEM     ;IF SET FOR MAIN RAM
E0CABF: 8D 05 C0    >246           STA   WRITAUX     ;SET AUX WRITE
E0CAC2: 60          >247  :WRITEM  RTS              
                    >248  
                    >249  *----------------------------
                    >250  * Display "OUT OF RANGE"
                    >251  
                    >252  DISBROUT                  
E0CAC3: F4 0E C8    >253           PEA   MSGBROUT   ;message location
E0CAC6: 4C F1 CA    >254           JMP   DOWRITE4   ;display it
                    >255  
                    >256  *-------------------------
                    >257  * Display NOT RAM message
                    >258  
                    >259  DISNOTRM                  
E0CAC9: F4 1E C8    >260           PEA   MSGNOTRM   ;message location
E0CACC: 4C F1 CA    >261           JMP   DOWRITE4   ;display it
                    >262  
                    >263  *----------------------
                    >264  * Display hardware
                    >265  
                    >266  DISHARD                   
E0CACF: F4 32 C8    >267           PEA   MSGHARD     ;message location
E0CAD2: 4C F1 CA    >268           JMP   DOWRITE4   ;display it
                    >269  
                    >270  *----------------------------
                    >271  OUTPRGR                   
                    >272  * If PC is in out slot I/O space then it's OK
E0CAD5: AD 20 C8    >273           LDA   PCHI       
E0CAD8: C9 C0       >274           CMP   #$C0       
E0CADA: D0 12 =CAEE >275           BNE   :NOTOK     
E0CADC: AD 29 C8    >276           LDA   SLOTN0     
E0CADF: 18          >277           CLC              
E0CAE0: 69 8F       >278           ADC   #$8F        ;OUR SLOT I/O LOWER BYTE
E0CAE2: CD 1F C8    >279           CMP   PCLO       
E0CAE5: 90 07 =CAEE >280           BLT   :NOTOK     
E0CAE7: E9 10       >281           SBC   #$10       
E0CAE9: CD 1F C8    >282           CMP   PCLO       
E0CAEC: 90 06 =CAF4 >283           BLT   OKCIS4      ;C=0 IF OK
                    >284  
E0CAEE: F4 3F C8    >285  :NOTOK   PEA   MSGORNG     ;message location
                    >286  DOWRITE4                  
E0CAF1: 20 FA CA    >287           JSR   WRITE4      ;display it
E0CAF4: 60          >288  OKCIS4   RTS              
                    >289  
E0CAF5: F4 57 C8    >290  NOACMSG  PEA   MSGNOAC     ;message location
E0CAF8: 80 F7 =CAF1 >291           BRA   DOWRITE4   ;display it
                    >292  
                    >293  
                    >294  *---------------------------------
                    >295  * Write text to the display device
                    >296  * The address of the text is on the stack
                    >297  
                    >298  * THIS ROUTINE MUST BE ABOVE $CF00
                    >299  
E0CAFA: 8C 47 C8    >300  WRITE4   STY   YBUFF       ;SAVE
E0CAFD: A0 00       >301           LDY   #0         
                    >302  WRITLOP4                  
E0CAFF: CD 00 C8    >303           CMP   $C800       ;disable DDT RAM
E0CB02: B3 03       >304           LDA   (3,S),Y     ;get character to display
E0CB04: CD 00 CF    >305           CMP   $CF00       ;enable DDT RAM
E0CB07: C8          >306           INY              ;next character
E0CB08: C9 84       >307           CMP   #EOT        ;finished?
E0CB0A: F0 06 =CB12 >308           BEQ   WRITDON4   ;if yes
E0CB0C: 20 C6 CF    >309           JSR   TRANSFR4   ;display character
E0CB0F: 07          >310           DFB   COUTC       ;code
E0CB10: 80 ED =CAFF >311           BRA   WRITLOP4   ;loop until done
                    >312  
                    >313  WRITDON4                  
E0CB12:             >314           MEMORY16         
E0CB12: C2 20       >314           REP   #$20       
                    >314           <<<              
E0CB14: 68          >315           PLA              ;get return address
E0CB15: 83 01       >316           STA   1,S         ;free parameter space
E0CB17:             >317           MEMORY8          
E0CB17: E2 20       >317           SEP   #$20       
                    >317           <<<              
E0CB19: AC 47 C8    >318           LDY   YBUFF       ;RESTORE
E0CB1C: 60          >319           RTS              
                    >320  
                    >321  *-------------------------------------------------
                    >322  * Initialize the display window to full screen
                    >323  
E0CB1D: A9 00       >324  WINDFUL  LDA   #0         
E0CB1F: 8D FF C8    >325           STA   WINDLEFT   
E0CB22: 8D 01 C9    >326           STA   WINDTOP    
E0CB25: 8D 03 C9    >327           STA   CURSHORZ   
E0CB28: A9 50       >328           LDA   #80        
E0CB2A: 8D 00 C9    >329           STA   WINDWDTH   
E0CB2D: A9 18       >330           LDA   #24        
E0CB2F: 8D 02 C9    >331           STA   WINDBTM    
E0CB32: 20 C6 CF    >332           JSR   TRANSFR4   ;SET BASL & CLEAR HOME
E0CB35: 97          >333           DFB   CLRHOMEC   ;CODE
                    >334  
E0CB36: 38          >335           SEC              
E0CB37: 6E 98 C8    >336           ROR   WINDFLG     ;indicate windows are off
                    >337  
E0CB3A: 60          >338           RTS              
                    >339  
                    >340  ******************************
                    >341  * COMDSD - SET DISPLAY SWITCH
                    >342  ******************************
                    >343  
E0CB3B: F0 3E =CB7B >344  COMDSD   BEQ   :SDERR      ;IF NO CHAR FOLLOWS
                    >345  
                    >346  * Set the display switches
                    >347  * ACC contains command letter
                    >348  
E0CB3D: C9 D3       >349           CMP   #"S"        ;Super Hi-Res ?
E0CB3F: D0 13 =CB54 >350           BNE   :NOSUP      ;if no
E0CB41: AD 22 C8    >351           LDA   INVISIBL   ;INVISIBLE MODE FLAG
E0CB44: 48          >352           PHA              ;SAVE
E0CB45: 20 CB CB    >353           JSR   USERDISP   ;Restore User's Display
E0CB48: A9 80       >354           LDA   #$80        ;Set Super Hi-Res bit
E0CB4A: 0C 29 C0    >355           TSB   SUPERHR    
E0CB4D: A9 08       >356           LDA   #$08        ;Enable shadowing of Super Hi-Res
E0CB4F: 1C 35 C0    >357           TRB   SHADOW      ;Store
E0CB52: 80 68 =CBBC >358           BRA   :SAVENEW   ;Save the new display switches
                    >359  
E0CB54: A2 00       >360  :NOSUP   LDX   #0         
E0CB56: 8D 0E C9    >361           STA   SELFMOD     ;SAVE COMMAND LETTER
E0CB59: 8D 00 C8    >362           STA   $C800       ;SELECT EXT ROM
E0CB5C: BD 68 C8    >363           LDA   DISPTABL,X ;GET COMMAND LETTER FROM TABLE
E0CB5F: 8D 00 CF    >364           STA   $CF00       ;SELECT EXT RAM
E0CB62: CD 0E C9    >365  :LOOK    CMP   SELFMOD     ;IS IT THIS COMMAND
E0CB65: F0 17 =CB7E >366           BEQ   :MATCH      ;IF YES
E0CB67: 8D 00 C8    >367           STA   $C800       ;SELECT EXT ROM
E0CB6A: E8          >368  :LOOP    INX              
E0CB6B: BD 68 C8    >369           LDA   DISPTABL,X ;GO TO NEXT COMMAND LETTER
E0CB6E: 10 FA =CB6A >370           BPL   :LOOP      
E0CB70: E8          >371           INX              
E0CB71: BD 68 C8    >372           LDA   DISPTABL,X 
E0CB74: 8D 00 CF    >373           STA   $CF00       ;SELECT EXT RAM
E0CB77: C9 FF       >374           CMP   #$FF        ;END OF TABLE ?
E0CB79: D0 E7 =CB62 >375           BNE   :LOOK       ;IF NO
                    >376  
E0CB7B: 4C 57 CA    >377  :SDERR   JMP   ERROR4      ;INDICATE ERROR & GOTO GETCOM4
                    >378  
                    >379  
E0CB7E: 8E 0F C9    >380  :MATCH   STX   SELFMOD+1  ;SAVE
E0CB81: AD 22 C8    >381           LDA   INVISIBL   ;INVISIBLE MODE FLAG
E0CB84: 48          >382           PHA              ;SAVE
E0CB85: 20 CB CB    >383           JSR   USERDISP   ;Restore User's display
E0CB88: AE 0F C9    >384           LDX   SELFMOD+1  ;RESTORE
                    >385  
E0CB8B: AD 0E C9    >386           LDA   SELFMOD    
E0CB8E: C9 D4       >387           CMP   #"T"        ;Text mode ?
E0CB90: D0 05 =CB97 >388           BNE   :NOTXT      ;If no
E0CB92: A9 80       >389           LDA   #$80       
E0CB94: 1C 29 C0    >390           TRB   SUPERHR     ;Turn off Super Hi-Res if enabled
                    >391  
                    >392  * Initialize self modifing code
                    >393  
E0CB97: A9 8D       >394  :NOTXT   LDA   #$8D        ;STA abs OPCODE
E0CB99: 8D 0E C9    >395           STA   SELFMOD    
E0CB9C: A9 C0       >396           LDA   #$C0        ;HI BYTE OF SWITCH ADDRESS
E0CB9E: 8D 10 C9    >397           STA   SELFMOD+2  
E0CBA1: A9 60       >398           LDA   #$60        ;RTS OPCODE
E0CBA3: 8D 11 C9    >399           STA   SELFMOD+3  
                    >400  
                    >401  * Set the selected switches
                    >402  
E0CBA6: 8D 00 C8    >403  :NEXTS   STA   $C800       ;SELECT EXT ROM
E0CBA9: E8          >404           INX              
E0CBAA: BD 68 C8    >405           LDA   DISPTABL,X ;LOW BYTE OF SWITCH
E0CBAD: 8D 00 CF    >406           STA   $CF00       ;SELECT EXT RAM
E0CBB0: 08          >407           PHP              ;SAVE N FLAG
E0CBB1: 29 7F       >408           AND   #$7F        ;STRIP BIT 7
E0CBB3: 8D 0F C9    >409           STA   SELFMOD+1  ;PUT IN ROUTINE
E0CBB6: 20 0E C9    >410           JSR   SELFMOD     ;SET SWITCH
E0CBB9: 28          >411           PLP              ;WAS IT LAST SWITCH
E0CBBA: 10 EA =CBA6 >412           BPL   :NEXTS      ;IF NO
                    >413  
                    >414  * Save the new display settings
                    >415  
                    >416  :SAVENEW                  
E0CBBC: 20 C6 CF    >417           JSR   TRANSFR4   ;set MSTATE (sets aux switches) calculate bank
E0CBBF: 4E          >418           DFB   SETMPBRC   ;code
E0CBC0: 20 C6 CF    >419           JSR   TRANSFR4   ;SAVE NEW DISPLAY SWITCHES
E0CBC3: 36          >420           DFB   SAVEDISPC  ;code
E0CBC4: 68          >421           PLA              ;GET INVISIBL MODE FLAG
E0CBC5: 8D 22 C8    >422           STA   INVISIBL   ;RESTORE
E0CBC8: 4C 49 CF    >423           JMP   GETCOM4    
                    >424  
                    >425  *------------------------------------
                    >426  * Restore the user's display settings
                    >427  
                    >428  USERDISP                  
                    >429  
                    >430  * Turn DDT display off
E0CBCB: 20 C6 CF    >431           JSR   TRANSFR4   ;RESTORE TEXT & DISPLAY SWITCHES
E0CBCE: 1E          >432           DFB   RESTTEXTC  ;code
E0CBCF: A9 80       >433           LDA   #$80       
E0CBD1: 8D 25 C8    >434           STA   OFFFLAG     ;TURN OFF EXT DISPLAY
                    >435  
E0CBD4: A9 00       >436           LDA   #0         
E0CBD6: 8D 22 C8    >437           STA   INVISIBL   ;CLEAR IF SET
E0CBD9: 20 C6 CF    >438           JSR   TRANSFR4   ;RESTORE DISPLAY SWITCHES
E0CBDC: 26          >439           DFB   RESTDISPC  ;code
E0CBDD: 4C B3 CA    >440           JMP   RESTAUX     ;restore aux ram switches & RTS
                    >441  
                    >442  ******************************
                    >443  * COMDPW - PROTECTION WINDOW
                    >444  ******************************
                    >445  
E0CBE0: A2 1E       >446  COMDPW   LDX   #5*6        ;0-5 BUFFFERS 6 BYTES EACH BUFFER
E0CBE2: 8E 30 C8    >447           STX   LETTER1     ;SAVE
E0CBE5: 20 C6 CF    >448           JSR   TRANSFR4   ;DISPLAY PROT WINDOW
E0CBE8: BF          >449           DFB   DISPROTWC  ;code
E0CBE9: 20 C6 CF    >450           JSR   TRANSFR4   ;HOME
E0CBEC: 9F          >451           DFB   HOMEC       ;code
E0CBED: A9 A0       >452           LDA   #$A0        ;SPACE
E0CBEF: 8D FA C8    >453           STA   PROMPT     
E0CBF2: AD 24 C8    >454  PWINPUT  LDA   IOMODE      ;ARE WE IN SERIAL or printer MODE ?
E0CBF5: F0 3F =CC36 >455           BEQ   :NOSER      ;IF NOT
                    >456  
                    >457  * Display current PW info if serial or printer
E0CBF7: AE 30 C8    >458           LDX   LETTER1    
E0CBFA: BD D1 C8    >459           LDA   PROTADR,X  ;GET PROTECTION TYPE
E0CBFD: 20 C6 CF    >460           JSR   TRANSFR4   ;DISPLAY
E0CC00: 07          >461           DFB   COUTC       ;code
E0CC01: BD D2 C8    >462           LDA   PROTADR+1,X 
E0CC04: 20 C6 CF    >463           JSR   TRANSFR4   ;PRINT BYTE
E0CC07: 37          >464           DFB   PRBYTEC     ;code
E0CC08: A9 AF       >465           LDA   #"/"       
E0CC0A: 20 C6 CF    >466           JSR   TRANSFR4   
E0CC0D: 07          >467           DFB   COUTC      
E0CC0E: BD D3 C8    >468           LDA   PROTADR+2,X 
E0CC11: 20 C6 CF    >469           JSR   TRANSFR4   
E0CC14: 37          >470           DFB   PRBYTEC     ;code
E0CC15: BD D4 C8    >471           LDA   PROTADR+3,X 
E0CC18: 20 C6 CF    >472           JSR   TRANSFR4   
E0CC1B: 37          >473           DFB   PRBYTEC     ;code
E0CC1C: A9 AE       >474           LDA   #"."       
E0CC1E: 20 C6 CF    >475           JSR   TRANSFR4   
E0CC21: 07          >476           DFB   COUTC       ;code
E0CC22: BD D5 C8    >477           LDA   PROTADR+4,X 
E0CC25: 20 C6 CF    >478           JSR   TRANSFR4   
E0CC28: 37          >479           DFB   PRBYTEC     ;code
E0CC29: BD D6 C8    >480           LDA   PROTADR+5,X 
E0CC2C: 20 C6 CF    >481           JSR   TRANSFR4   
E0CC2F: 37          >482           DFB   PRBYTEC     ;code 
E0CC30: A9 A0       >483           LDA   #" "       
E0CC32: 20 C6 CF    >484           JSR   TRANSFR4   
E0CC35: 07          >485           DFB   COUTC       ;code
                    >486  
E0CC36: 20 C6 CF    >487  :NOSER   JSR   TRANSFR4   ;GET LINE
E0CC39: 57          >488           DFB   GETLNC      ;code
E0CC3A: B0 76 =CCB2 >489           BCS   :END        ;if <esc> key pressed
E0CC3C: E8          >490           INX              
E0CC3D: 8E A1 C9    >491           STX   TEMP        ;IN POINTER
E0CC40: A0 00       >492           LDY   #0         
E0CC42: 20 1E CD    >493           JSR   GETCHAR     ;GET FROM IN,Y
E0CC45: F0 44 =CC8B >494           BEQ   :CR         ;IF <CR>
E0CC47: C9 D4       >495           CMP   #"T"        ;TRACE RANGE ?
E0CC49: F0 0C =CC57 >496           BEQ   :SAVETYPE  ;IF YES
E0CC4B: C9 D0       >497           CMP   #"P"        ;PROGRAM ONLY RANGE ?
E0CC4D: F0 08 =CC57 >498           BEQ   :SAVETYPE  ;IF YES
E0CC4F: C9 CE       >499           CMP   #"N"        ;NO ACCESS RANGE ?
E0CC51: F0 04 =CC57 >500           BEQ   :SAVETYPE  ;IF YES
E0CC53: C9 A0       >501           CMP   #$A0        ;SPACE MEANS REMOVE TYPE
E0CC55: D0 30 =CC87 >502           BNE   :ERROR      ;IF NO
                    >503  :SAVETYPE                 
E0CC57: AE 30 C8    >504           LDX   LETTER1     ;PROTADR POINTER
E0CC5A: 9D D1 C8    >505           STA   PROTADR,X  ;SAVE TYPE
                    >506  
                    >507  * Load in 1 byte of PROTADR address, loop until done
E0CC5D: E8          >508  :PRBYT   INX              ;NEXT BYTE
E0CC5E: 20 1E CD    >509           JSR   GETCHAR     ;READ IN,Y
E0CC61: F0 28 =CC8B >510           BEQ   :CR         ;IF <CR>
E0CC63: 20 05 CD    >511           JSR   CHKHEX      ;CONVERT TO HEX
E0CC66: B0 1F =CC87 >512           BCS   :ERROR      ;IF NOT HEX
E0CC68: 20 EB CC    >513           JSR   MSNYBPW     ;UPDATE MS NYBBLE OF DATA
E0CC6B: 20 1E CD    >514           JSR   GETCHAR     ;READ IN,Y
E0CC6E: F0 1B =CC8B >515           BEQ   :CR        
E0CC70: 20 05 CD    >516           JSR   CHKHEX     
E0CC73: B0 12 =CC87 >517           BCS   :ERROR     
E0CC75: 20 F4 CC    >518           JSR   LSNYBPW     ;UPDATE LS NYBBLE OF DATA
E0CC78: C0 03       >519           CPY   #3          ;SKIP "/" ?
E0CC7A: F0 04 =CC80 >520           BEQ   :SKIP       ;IF YES
E0CC7C: C0 08       >521           CPY   #8          ;SKIP "." ?
E0CC7E: D0 DD =CC5D >522           BNE   :PRBYT     
E0CC80: 20 1E CD    >523  :SKIP    JSR   GETCHAR    
E0CC83: F0 06 =CC8B >524           BEQ   :CR        
E0CC85: D0 D6 =CC5D >525           BNE   :PRBYT     
E0CC87: 20 C6 CF    >526  :ERROR   JSR   TRANSFR4   ;RING BELL
E0CC8A: 77          >527           DFB   BELLC       ;code
E0CC8B: AD 04 C9    >528  :CR      LDA   CURSVERT   ;SAVE CURRENT POSITION
E0CC8E: 48          >529           PHA              
E0CC8F: 20 C6 CF    >530           JSR   TRANSFR4   ;UPDATE PROT WINDOW
E0CC92: BF          >531           DFB   DISPROTWC  ;code
E0CC93: 68          >532           PLA              
E0CC94: 8D 04 C9    >533           STA   CURSVERT   ;RESTORE POSITION
E0CC97: A9 00       >534           LDA   #0         
E0CC99: 8D 03 C9    >535           STA   CURSHORZ   ;LEFT EDGE
E0CC9C: 20 C6 CF    >536           JSR   TRANSFR4   ;RESTORE BAS
E0CC9F: 8F          >537           DFB   VTABC       ;code
E0CCA0: AE 30 C8    >538           LDX   LETTER1     ;PROTADR POINTER
E0CCA3: D0 03 =CCA8 >539           BNE   :NEXT       ;if not at bottom of window
E0CCA5: 4C E0 CB    >540           JMP   COMDPW      ;go to top of window
E0CCA8: 38          >541  :NEXT    SEC              
E0CCA9: 8A          >542           TXA              
E0CCAA: E9 06       >543           SBC   #6          ;GOTO NEXT LOCATION
E0CCAC: 8D 30 C8    >544           STA   LETTER1    
E0CCAF: 4C F2 CB    >545           JMP   PWINPUT     ;LOOP
                    >546  
                    >547  * Set proper flags & leave
E0CCB2: A9 00       >548  :END     LDA   #0         
E0CCB4: 8D 94 C8    >549           STA   REALTIME   ;CLEAR ALL FLAGS
E0CCB7: 8D 95 C8    >550           STA   PROGONLY   
E0CCBA: 8D 96 C8    >551           STA   NOACCESS   
E0CCBD: A2 1E       >552           LDX   #6*5       
E0CCBF: BD D1 C8    >553  :SETFLG  LDA   PROTADR,X  ;GET TYPE
E0CCC2: C9 D4       >554           CMP   #"T"       
E0CCC4: D0 03 =CCC9 >555           BNE   :CHKP      
E0CCC6: 8D 94 C8    >556           STA   REALTIME   ;SET FLAG
E0CCC9: C9 D0       >557  :CHKP    CMP   #"P"       
E0CCCB: D0 03 =CCD0 >558           BNE   :CHKN      
E0CCCD: 8D 95 C8    >559           STA   PROGONLY   ;SET FLAG
E0CCD0: C9 CE       >560  :CHKN    CMP   #"N"       
E0CCD2: D0 03 =CCD7 >561           BNE   :NEXTTYP   
E0CCD4: 8D 96 C8    >562           STA   NOACCESS   ;SET FLAG
                    >563  :NEXTTYP                  
E0CCD7: 8A          >564           TXA              
E0CCD8: F0 06 =CCE0 >565           BEQ   :LEAVE     
E0CCDA: 38          >566           SEC              
E0CCDB: E9 06       >567           SBC   #6          ;NEXT TYPE
E0CCDD: AA          >568           TAX              
E0CCDE: B0 DF =CCBF >569           BCS   :SETFLG     ;<ALWAYS>
                    >570  
E0CCE0: 20 C6 CF    >571  :LEAVE   JSR   TRANSFR4   ;UPDATE PROT WINDOW
E0CCE3: BF          >572           DFB   DISPROTWC  ;code
E0CCE4: 20 C6 CF    >573           JSR   TRANSFR4   ;SET DR WINDOW
E0CCE7: A6          >574           DFB   WINDDRC     ;code
                    >575  
E0CCE8: 4C 49 CF    >576           JMP   GETCOM4    
                    >577  
                    >578  * Update the MS nybble of data byte
                    >579  
E0CCEB: 0A          >580  MSNYBPW  ASL              
E0CCEC: 0A          >581           ASL              
E0CCED: 0A          >582           ASL              
E0CCEE: 0A          >583           ASL              
E0CCEF: 48          >584           PHA              ;SAVE DIGIT
E0CCF0: A9 0F       >585           LDA   #$0F       
E0CCF2: D0 03 =CCF7 >586           BNE   STRIP      
                    >587  
                    >588  * Update the LS nybble of data byte
                    >589  
E0CCF4: 48          >590  LSNYBPW  PHA              ;SAVE DIGIT
E0CCF5: A9 F0       >591           LDA   #$F0       
E0CCF7: 3D D1 C8    >592  STRIP    AND   PROTADR,X  ;STRIP DIGIT
E0CCFA: 9D D1 C8    >593           STA   PROTADR,X  
E0CCFD: 68          >594           PLA              ;GET NEW DIGIT
E0CCFE: 1D D1 C8    >595           ORA   PROTADR,X  
E0CD01: 9D D1 C8    >596           STA   PROTADR,X  ;PUT IN
E0CD04: 60          >597           RTS              
                    >598  
                    >599  * Convert ACC to hex
                    >600  
E0CD05: C9 B0       >601  CHKHEX   CMP   #$B0       
E0CD07: 90 0C =CD15 >602           BLT   :NOTHEX    
E0CD09: C9 BA       >603           CMP   #$BA       
E0CD0B: 90 0D =CD1A >604           BLT   :OK        
E0CD0D: C9 C0       >605           CMP   #$C0       
E0CD0F: 90 04 =CD15 >606           BLT   :NOTHEX    
E0CD11: C9 C7       >607           CMP   #$C7       
E0CD13: 90 02 =CD17 >608           BLT   :OKAF      
E0CD15: 38          >609  :NOTHEX  SEC              ;SET NOT HEX FLAG
E0CD16: 60          >610           RTS              
                    >611  
E0CD17: 18          >612  :OKAF    CLC              
E0CD18: 69 09       >613           ADC   #9          ;CONVERT TO $A - $F
E0CD1A: 29 0F       >614  :OK      AND   #$0F        ;STRIP HI DIGIT
E0CD1C: 18          >615           CLC              ;SET HEX FLAG
E0CD1D: 60          >616           RTS              
                    >617  
E0CD1E: B9 63 C9    >618  GETCHAR  LDA   IN,Y       ;READ CHAR
E0CD21: C8          >619           INY              
E0CD22: CE A1 C9    >620           DEC   TEMP       ;IN POINTER
E0CD25: 60          >621           RTS              
                    >622  
                    >623  ******************************
                    >624  * COMDMW - MEMORY WINDOW
                    >625  ******************************
                    >626  
E0CD26: 20 C6 CF    >627  COMDMW   JSR   TRANSFR4   ;SET MEM WINDOW
E0CD29: AF          >628           DFB   DISMEMWC   ;code
E0CD2A: 20 C6 CF    >629           JSR   TRANSFR4   ;HOME W/NO CLEAR
E0CD2D: 9F          >630           DFB   HOMEC       ;code
                    >631  
                    >632  * Set window width to froce return at end of address
E0CD2E: A9 08       >633           LDA   #8         
E0CD30: 8D 00 C9    >634           STA   WINDWDTH   
E0CD33: A2 21       >635           LDX   #11*3       ;0-11 BUFFFERS 3 BYTES EACH BUFFER
E0CD35: 8E 30 C8    >636           STX   LETTER1     ;SAVE
                    >637  
E0CD38: A9 80       >638           LDA   #$80        ;NULL
E0CD3A: 8D FA C8    >639           STA   PROMPT     
E0CD3D: 20 C6 CF    >640  MWINPUT  JSR   TRANSFR4   ;GET LINE
E0CD40: 57          >641           DFB   GETLNC      ;code
E0CD41: B0 60 =CDA3 >642           BCS   :END        ;if <esc> key pressed
E0CD43: E8          >643           INX              
E0CD44: 8E A1 C9    >644           STX   TEMP        ;IN POINTER
E0CD47: A0 00       >645           LDY   #0         
                    >646  
E0CD49: AE 30 C8    >647           LDX   LETTER1     ;MEM ADDRESS POINTER
E0CD4C: CA          >648           DEX              
                    >649  
                    >650  * Load in 1 byte of MEMADR address, loop until done
E0CD4D: E8          >651  :PRBYT   INX              ;NEXT BYTE
E0CD4E: 20 1E CD    >652           JSR   GETCHAR     ;READ IN,Y
E0CD51: F0 24 =CD77 >653           BEQ   :CR         ;IF <CR>
E0CD53: 20 05 CD    >654           JSR   CHKHEX      ;CONVERT TO HEX
E0CD56: B0 1B =CD73 >655           BCS   :ERROR      ;IF NOT HEX
E0CD58: 20 AE CD    >656           JSR   ASLUPMW     ;UPDATE MS NYBBLE OF DATA
E0CD5B: 20 1E CD    >657           JSR   GETCHAR     ;READ IN,Y
E0CD5E: F0 17 =CD77 >658           BEQ   :CR        
E0CD60: 20 05 CD    >659           JSR   CHKHEX     
E0CD63: B0 0E =CD73 >660           BCS   :ERROR     
E0CD65: 20 B7 CD    >661           JSR   UPDTMW      ;UPDATE LS NYBBLE OF DATA
E0CD68: C0 02       >662           CPY   #2          ;SKIP "/" ?
E0CD6A: D0 E1 =CD4D >663           BNE   :PRBYT      ;IF NO
E0CD6C: 20 1E CD    >664  :SKIP    JSR   GETCHAR    
E0CD6F: F0 06 =CD77 >665           BEQ   :CR        
E0CD71: D0 DA =CD4D >666           BNE   :PRBYT      ;<ALWAYS>
E0CD73: 20 C6 CF    >667  :ERROR   JSR   TRANSFR4   ;RING BELL
E0CD76: 77          >668           DFB   BELLC       ;code
E0CD77: AD 04 C9    >669  :CR      LDA   CURSVERT   ;SAVE CURRENT POSITION
E0CD7A: 48          >670           PHA              
E0CD7B: 20 C6 CF    >671           JSR   TRANSFR4   ;UPDATE PROT WINDOW
E0CD7E: AF          >672           DFB   DISMEMWC   ;code
E0CD7F: A9 08       >673           LDA   #8         
E0CD81: 8D 00 C9    >674           STA   WINDWDTH   ;RESET WINDOW WIDTH
E0CD84: 68          >675           PLA              
E0CD85: 8D 04 C9    >676           STA   CURSVERT   ;RESTORE POSITION
E0CD88: A9 00       >677           LDA   #0         
E0CD8A: 8D 03 C9    >678           STA   CURSHORZ   ;LEFT EDGE
E0CD8D: 20 C6 CF    >679           JSR   TRANSFR4   ;RESTORE BAS
E0CD90: 8F          >680           DFB   VTABC       ;code
E0CD91: AE 30 C8    >681           LDX   LETTER1     ;MEMADR POINTER
E0CD94: D0 03 =CD99 >682           BNE   :NEXT       ;if not bottom of window
E0CD96: 4C 26 CD    >683           JMP   COMDMW      ;go to top of window
E0CD99: 38          >684  :NEXT    SEC              
E0CD9A: 8A          >685           TXA              
E0CD9B: E9 03       >686           SBC   #3          ;GOTO NEXT LOCATION
E0CD9D: 8D 30 C8    >687           STA   LETTER1    
E0CDA0: 4C 3D CD    >688           JMP   MWINPUT     ;LOOP
                    >689  
E0CDA3: 20 C6 CF    >690  :END     JSR   TRANSFR4   ;UPDATE MW DISPLAY
E0CDA6: AF          >691           DFB   DISMEMWC   ;code
E0CDA7: 20 C6 CF    >692           JSR   TRANSFR4   ;SET DR WINDOW
E0CDAA: A6          >693           DFB   WINDDRC    ;code
                    >694  
E0CDAB: 4C 49 CF    >695           JMP   GETCOM4    
                    >696  
                    >697  * Update hi nybble of MEMWADR
                    >698  
E0CDAE: 0A          >699  ASLUPMW  ASL              
E0CDAF: 0A          >700           ASL              
E0CDB0: 0A          >701           ASL              
E0CDB1: 0A          >702           ASL              
E0CDB2: 48          >703           PHA              ;SAVE DIGIT
E0CDB3: A9 0F       >704           LDA   #$0F       
E0CDB5: D0 03 =CDBA >705           BNE   STRIPMW    
                    >706  
                    >707  * Update low nybble of MEMWADR
                    >708  
E0CDB7: 48          >709  UPDTMW   PHA              ;SAVE DIGIT
E0CDB8: A9 F0       >710           LDA   #$F0       
E0CDBA: 3D AA C8    >711  STRIPMW  AND   MEMWADR,X  ;STRIP DIGIT
E0CDBD: 9D AA C8    >712           STA   MEMWADR,X  
E0CDC0: 68          >713           PLA              ;GET NEW DIGIT
E0CDC1: 1D AA C8    >714           ORA   MEMWADR,X  
E0CDC4: 9D AA C8    >715           STA   MEMWADR,X  ;PUT IN
E0CDC7: 60          >716           RTS              
                    >717  
                    >718  
                    >719  ****************************************
                    >720  * Calculate the bank for the current MEMLOW & MEMHI location
                    >721  *
                    >722  * Location MSTATE contains the memory state byte. Use this to
                    >723  * determine if current MEMLOW & MEMHI location is in main or
                    >724  * aux memory. Modify MSTATE byte for this test, make BIT5=HIRES
                    >725  *****************************************
                    >726  
E0CDC8: AD 1D C0    >727  BANKCHEK LDA   HIRESFLG   
E0CDCB: 29 80       >728           AND   #$80       
E0CDCD: 4A          >729           LSR              
E0CDCE: 4A          >730           LSR              ;PUT IN BIT 5
E0CDCF: 4D 1C C8    >731           EOR   MSTATE     
E0CDD2: 29 20       >732           AND   #$20       
E0CDD4: 4D 1C C8    >733           EOR   MSTATE      ;BIT5 = HIRES
E0CDD7: 8D A1 C9    >734           STA   TEMP       
E0CDDA: A2 21       >735           LDX   #$21       
E0CDDC: AD 3E C8    >736           LDA   MEMHI       ;HI BYTE OF PC
E0CDDF: C9 C0       >737           CMP   #$C0       
E0CDE1: F0 2C =CE0F >738           BEQ   MAINRAM    
E0CDE3: AD 3E C8    >739  MATCHPC  LDA   MEMHI       ;HI BYTE OF PC
E0CDE6: CD 00 C8    >740           CMP   $C800      
E0CDE9: DD 8A C8    >741           CMP   BANKTABL,X 
E0CDEC: 8D 00 CF    >742           STA   $CF00      
E0CDEF: 90 19 =CE0A >743           BLT   NOTAUX      ;TRY NEXT LIMIT
                    >744  
E0CDF1: AD A1 C9    >745           LDA   TEMP        ;GET MSTATE WITH MOD. BIT 5
E0CDF4: CD 00 C8    >746           CMP   $C800       ;DISABLE DDT RAM
E0CDF7: 5D 8B C8    >747           EOR   BANKTABL+1,X ;XOR WITH TEST BYTE
E0CDFA: 3D 8C C8    >748           AND   BANKTABL+2,X ;AND WITH TEST BYTE
E0CDFD: F0 15 =CE14 >749           BEQ   ISAUX       ;IF =0 THEN AUX RAM
                    >750  
                    >751  * IF NOT AUX RAM, SHOULD WE USE THE NEXT BANKTABL FLAGS
E0CDFF: BD 87 C8    >752           LDA   BANKTABL-3,X ;GET NEXT BANKTABL LOWER LIMIT
E0CE02: DD 8A C8    >753           CMP   BANKTABL,X ;SAME AS CURRENT LIMIT ?
E0CE05: 8D 00 CF    >754           STA   $CF00       ;ENAB EXT RAM
E0CE08: D0 05 =CE0F >755           BNE   MAINRAM     ;IF NO
                    >756  
E0CE0A: CA          >757  NOTAUX   DEX              
E0CE0B: CA          >758           DEX              
E0CE0C: CA          >759           DEX              
E0CE0D: 10 D4 =CDE3 >760           BPL   MATCHPC    
                    >761  MAINRAM                   
E0CE0F: AD 1B C8    >762           LDA   DBR        
E0CE12: 80 0C =CE20 >763           BRA   BANKSET    
                    >764  
                    >765  * IF AUX RAM
E0CE14: 8D 00 CF    >766  ISAUX    STA   $CF00       ;ENABLE EXT RAM
E0CE17: AD 1B C8    >767           LDA   DBR        
E0CE1A: C9 02       >768           CMP   #2          ;BANK IS 1 ONLY IF DBR IS 00 OR 01
E0CE1C: B0 02 =CE20 >769           BGE   BANKSET    
E0CE1E: A9 01       >770           LDA   #01        
E0CE20: 60          >771  BANKSET  RTS              ;LEAVE
                    >772  
                    >773  *----------------------------------------
                    >774  * Calculate bank # of effective address
                    >775  * EFFADRS+2, +1, +0 = effective PBR, hi, low respectively
                    >776  
E0CE21:             >777  BANKEFF  MX8              
E0CE21: E2 30       >777           SEP   #$30       
                    >777           <<<              
E0CE23: DA          >778           PHX              
E0CE24: 08          >779           PHP              ;SAVE CARRY
E0CE25: AD 3E C8    >780           LDA   MEMHI       ;SAVE MEMHI
E0CE28: 48          >781           PHA              
E0CE29: AD CF C8    >782           LDA   EFFADRS+1  ;GET HI BYTE OF EFF ADRS
E0CE2C: 8D 3E C8    >783           STA   MEMHI       ;SET UP MEMHI FOR BANKCHEK
E0CE2F: 20 C8 CD    >784           JSR   BANKCHEK   ;CALCULATE BANK #
E0CE32: 8D D0 C8    >785           STA   EFFADRS+2  ;SAVE BANK # OF EFFADRS
E0CE35: 68          >786           PLA              
E0CE36: 8D 3E C8    >787           STA   MEMHI       ;RESTORE MEMHI
E0CE39: 28          >788           PLP              ;RESTORE CARRY
E0CE3A: FA          >789           PLX              
E0CE3B: 60          >790           RTS              
                    >791  
                    >792  *-------------------------------------------------
                    >793  * Calculate the effective address of current instruction
                    >794  
E0CE3C: AE B0 C9    >795  CALCEFF  LDX   MODE        ;GET MODE * 2
E0CE3F:             >796           MEMORY16         
E0CE3F: C2 20       >796           REP   #$20       
                    >796           <<<              
E0CE41: CD 00 C8    >797           CMP   $C800       ;SELECT EXT ROM
E0CE44: BD AE C8    >798           LDA   EFFTABL,X  ;GET ADDRESS OF PROPER ROUTINE
E0CE47: CD 00 CF    >799           CMP   $CF00       ;SELECT EXT RAM
E0CE4A: 48          >800           PHA              ;PUT ON STACK
E0CE4B: 18          >801           CLC              
E0CE4C: 60          >802           RTS              ;GOTO ROUTINE WITH RTS
                    >803           MX    %11        
                    >804  
                    >805           MX    %01        
E0CE4D:             >806  NOEFF    MEMORY8          
E0CE4D: E2 20       >806           SEP   #$20       
                    >806           <<<              
E0CE4F: 60          >807           RTS              
                    >808  
                    >809  * Calculate effective address routines
                    >810  
                    >811  * MODE 7 (d,X)
                    >812  
                    >813           MX    %01        
E0CE50: AD 13 C8    >814  EFFM7    LDA   XREG        ;USER'S X
E0CE53: 6D CE C8    >815           ADC   EFFADRS     ;ADD X TO OPERAND
E0CE56: 20 15 CF    >816  M11CONT  JSR   LDA_DREG   ;+ DREG, lda (operand) from bank 0
E0CE59: 8D CE C8    >817           STA   EFFADRS    
E0CE5C: 80 C3 =CE21 >818           BRA   BANKEFF    
                    >819           MX    %11        
                    >820  
                    >821  * MODE 11  (d)
                    >822  
                    >823           MX    %01        
E0CE5E: AD CE C8    >824  EFFM11   LDA   EFFADRS     ;GET OPERAND
E0CE61: 80 F3 =CE56 >825           BRA   M11CONT    
                    >826           MX    %11        
                    >827  
                    >828  * MODE B  al,X
                    >829  
                    >830           MX    %01        
E0CE63: AD CE C8    >831  EFFMB    LDA   EFFADRS    
E0CE66: 6D 13 C8    >832           ADC   XREG       
E0CE69: 8D CE C8    >833           STA   EFFADRS    
                    >834  
                    >835  * MODE 2 al
                    >836  
E0CE6C:             >837  EFFM2    MEMORY8          
E0CE6C: E2 20       >837           SEP   #$20       
                    >837           <<<              
E0CE6E: AD D0 C8    >838           LDA   EFFADRS+2  
E0CE71: 80 38 =CEAB >839           BRA   ADCBALT    
                    >840  
                    >841  * MODE 14  d,S
                    >842  
                    >843           MX    %01        
E0CE73: AD 17 C8    >844  EFFM14   LDA   STACK       ;LOW BYTE STACK
E0CE76: 80 51 =CEC9 >845           BRA   M14CONT    
                    >846           MX    %11        
                    >847  
                    >848  * MODE 15  (d,S),Y
                    >849  
                    >850           MX    %01        
E0CE78: AD 17 C8    >851  EFFM15   LDA   STACK      
E0CE7B: 6D CE C8    >852           ADC   EFFADRS    
E0CE7E: 80 06 =CE86 >853           BRA   M15CONT    
                    >854           MX    %11        
                    >855  
                    >856  * MODE 5  (d),Y
                    >857  
                    >858           MX    %01        
E0CE80: AD CE C8    >859  EFFM5    LDA   EFFADRS     ;GET OPERAND
E0CE83: 6D 19 C8    >860           ADC   DREG       
E0CE86: 20 18 CF    >861  M15CONT  JSR   LDA_OPR0   ;LDA (OPERAND) from bank 0
E0CE89: 18          >862           CLC              
E0CE8A: 6D 15 C8    >863           ADC   YREG        ;USER'S Y
                    >864  
E0CE8D: 8D CE C8    >865  EFFSTA   STA   EFFADRS    
E0CE90:             >866           MEMORY8          
E0CE90: E2 20       >866           SEP   #$20       
                    >866           <<<              
E0CE92: AD 1B C8    >867           LDA   DBR        
E0CE95: 69 00       >868           ADC   #0         
E0CE97: 80 14 =CEAD >869           BRA   BANKALT    
                    >870  
                    >871  * MODE 6  [d],Y
                    >872  
                    >873           MX    %01        
E0CE99: 20 12 CF    >874  EFFM6    JSR   LDA_EFF     ;lda operand, + DREG, lda (operand) bank 0
E0CE9C: 18          >875           CLC              
E0CE9D: 6D 15 C8    >876           ADC   YREG       
E0CEA0: 8D CE C8    >877           STA   EFFADRS    
E0CEA3:             >878           MEMORY8          
E0CEA3: E2 20       >878           SEP   #$20       
                    >878           <<<              
E0CEA5: C8          >879           INY              
E0CEA6: 08          >880           PHP              ;SAVE CARRY
E0CEA7: 20 39 CF    >881           JSR   LDA_BNK0   ;get PBR of [d] from bank 0
E0CEAA: 28          >882  EFFADC2  PLP              ;RESTORE CARRY
E0CEAB: 69 00       >883  ADCBALT  ADC   #0         
                    >884  
                    >885  * Enter with ACC = effective bank# to use
E0CEAD:             >886  BANKALT  MX8              
E0CEAD: E2 30       >886           SEP   #$30       
                    >886           <<<              
E0CEAF: AE 1B C8    >887           LDX   DBR        
E0CEB2: DA          >888           PHX              ;SAVE DBR
E0CEB3: 8D 1B C8    >889           STA   DBR         ;GET EFF. ADDRESS FOR BANK 0
E0CEB6: 20 21 CE    >890           JSR   BANKEFF    
E0CEB9: FA          >891           PLX              
E0CEBA: 8E 1B C8    >892           STX   DBR         ;RESTORE DBR
E0CEBD: 60          >893           RTS              
                    >894  
                    >895  * MODE 3  d
                    >896  
                    >897           MX    %01        
E0CEBE: A9 00 00    >898  EFFM3    LDA   #0         
E0CEC1: 80 03 =CEC6 >899           BRA   M9CONT     
                    >900           MX    %11        
                    >901  
                    >902  * MODE 8  d,X
                    >903  
                    >904           MX    %01        
E0CEC3: AD 13 C8    >905  EFFM8    LDA   XREG        ;USERS X
E0CEC6: 6D 19 C8    >906  M9CONT   ADC   DREG       
E0CEC9: 6D CE C8    >907  M14CONT  ADC   EFFADRS     ;ADD X TO OPERAND
E0CECC: 8D CE C8    >908           STA   EFFADRS    
E0CECF: A9 00 00    >909           LDA   #0000      
E0CED2: 80 D9 =CEAD >910           BRA   BANKALT     ;CALC BANK # & RTS
                    >911           MX    %11        
                    >912  
                    >913  * MODE 9  d,Y
                    >914  
                    >915           MX    %01        
E0CED4: AD 15 C8    >916  EFFM9    LDA   YREG        ;USERS Y
E0CED7: 80 ED =CEC6 >917           BRA   M9CONT     
                    >918           MX    %11        
                    >919  
                    >920  * MODE C  a,Y
                    >921  
                    >922           MX    %01        
E0CED9: AD 15 C8    >923  EFFMC    LDA   YREG        ;USERS Y
E0CEDC: 80 22 =CF00 >924           BRA   MCCONT     
                    >925           MX    %11        
                    >926  
                    >927  * MODE F  (a)
                    >928  
                    >929           MX    %01        
E0CEDE: AD CE C8    >930  EFFMF    LDA   EFFADRS     ;GET OPERAND
E0CEE1: 20 1D CF    >931  M13CONT  JSR   LDAOPER     ;LDA (OPERAND)
E0CEE4: 8D CE C8    >932           STA   EFFADRS    
E0CEE7: AD 21 C8    >933           LDA   PBR        
E0CEEA: 80 C1 =CEAD >934           BRA   BANKALT    
                    >935           MX    %11        
                    >936  
                    >937  * MODE $10 [a]
                    >938  
                    >939           MX    %01        
E0CEEC: AD CE C8    >940  EFFM10   LDA   EFFADRS     ;GET OPERAND
E0CEEF: 20 1D CF    >941           JSR   LDAOPER     ;LDA (OPERAND)
E0CEF2: 8D CE C8    >942           STA   EFFADRS    
E0CEF5:             >943           MEMORY8          
E0CEF5: E2 20       >943           SEP   #$20       
                    >943           <<<              
E0CEF7: C8          >944  M12CONT  INY              
E0CEF8: 20 39 CF    >945           JSR   LDA_BNK0   ;get byte from bank 0
E0CEFB: 80 B0 =CEAD >946           BRA   BANKALT    
                    >947  
                    >948  * MODE A  a,X
                    >949  
                    >950           MX    %01        
E0CEFD: AD 13 C8    >951  EFFMA    LDA   XREG        ;USERS X
E0CF00: 6D CE C8    >952  MCCONT   ADC   EFFADRS     ;LOW BYTE
E0CF03: 80 88 =CE8D >953           BRA   EFFSTA     
                    >954           MX    %11        
                    >955  
                    >956  * MODE 12  [d]
                    >957  
                    >958           MX    %01        
E0CF05: 20 5E CE    >959  EFFM12   JSR   EFFM11     
E0CF08: 80 ED =CEF7 >960           BRA   M12CONT    
                    >961           MX    %11        
                    >962  
                    >963  * MODE 13  (a,X)
                    >964  
                    >965           MX    %01        
E0CF0A: AD 13 C8    >966  EFFM13   LDA   XREG        ;USERS X REG
E0CF0D: 6D CE C8    >967           ADC   EFFADRS     ;ADD TO OPERAND
E0CF10: 80 CF =CEE1 >968           BRA   M13CONT    
                    >969           MX    %11        
                    >970  
                    >971  * LDA (OPERAND)
                    >972  
                    >973           MX    %01        
E0CF12: AD CE C8    >974  LDA_EFF  LDA   EFFADRS     ;get operand
                    >975  LDA_DREG                  
E0CF15: 6D 19 C8    >976           ADC   DREG        ;add direct register
                    >977  LDA_OPR0                  
E0CF18: A0 00       >978           LDY   #0         
E0CF1A: 8C 3C C8    >979           STY   DBRDDT      ;use bank 0
E0CF1D: 08          >980  LDAOPER  PHP              ;save carry & MX
E0CF1E: 8D 18 C9    >981           STA   LOWADD     
E0CF21: A0 00       >982           LDY   #0         
E0CF23:             >983           MEMORY8          
E0CF23: E2 20       >983           SEP   #$20       
                    >983           <<<              
E0CF25: 20 C6 CF    >984           JSR   TRANSFR4   ;get hi byte
E0CF28: 00          >985           DFB   LDAINDYC   ;code
E0CF29: 48          >986           PHA              ;save hi byte
E0CF2A: C8          >987           INY              ;next byte
E0CF2B: 20 C6 CF    >988           JSR   TRANSFR4   ;get low byte
E0CF2E: 00          >989           DFB   LDAINDYC   
E0CF2F: EB          >990           XBA              ;low/hi form
E0CF30: AD 08 C9    >991           LDA   MEMPBR     
E0CF33: 8D 3C C8    >992           STA   DBRDDT      ;restore to program bank
E0CF36: 68          >993           PLA              ;restore hi byte
E0CF37: 28          >994           PLP              ;restore carry & MX
E0CF38: 60          >995           RTS              
                    >996           MX    %11        
                    >997  
                    >998  * Get byte from bank 0
                    >999  LDA_BNK0                  
E0CF39: 9C 3C C8    >1000          STZ   DBRDDT      ;get from bank 0
E0CF3C: 20 C6 CF    >1001          JSR   TRANSFR4   ;
E0CF3F: 00          >1002          DFB   LDAINDYC   ;code
E0CF40: 48          >1003          PHA              ;save
E0CF41: AD 08 C9    >1004          LDA   MEMPBR     
E0CF44: 8D 3C C8    >1005          STA   DBRDDT      ;restore to program bank
E0CF47: 68          >1006          PLA              ;restore
E0CF48: 60          >1007          RTS              
                    >1008 
                    >1009 *----------------------------------------
                    >1010 *  GETCOM4 - do <CR> & get user command
                    >1011 
E0CF49: F4 FF C9    >1012 GETCOM4  PEA   GETCOMCR-1 ;address of command
E0CF4C: F4 00 05    >1013          PEA   S_GETCOM   ;segment of command
E0CF4F: 4C B7 CF    >1014          JMP   JUMPSEG4   ;goto command
                    >1015 
                    >1016 *----------------------------------------
                    >1017 ***** THIS SEGMENTS GLOBAL SUBROUTINES *****
                    >1018 
                    >1019 SUBTABL4                  
                    >1020 
            =0104   >1021 DISBROUTC EQU  *-SUBTABL4*4+4+$100 
E0CF52: C2 CA       >1022          DA    DISBROUT-1 
                    >1023 
            =010C   >1024 DISNOTRMC EQU  *-SUBTABL4*4+4+$100 
E0CF54: C8 CA       >1025          DA    DISNOTRM-1 
                    >1026 
            =0114   >1027 DISHARDC EQU   *-SUBTABL4*4+4+$100 
E0CF56: CE CA       >1028          DA    DISHARD-1  
                    >1029 
            =011C   >1030 OUTPRGRC EQU   *-SUBTABL4*4+4+$100 
E0CF58: D4 CA       >1031          DA    OUTPRGR-1  
                    >1032 
            =0124   >1033 NOACMSGC EQU   *-SUBTABL4*4+4+$100 
E0CF5A: F4 CA       >1034          DA    NOACMSG-1  
                    >1035 
            =012C   >1036 WINDFULC EQU   *-SUBTABL4*4+4+$100 
E0CF5C: 1C CB       >1037          DA    WINDFUL-1  
                    >1038 
            =0134   >1039 BANKCHEKC EQU  *-SUBTABL4*4+4+$100 
E0CF5E: C7 CD       >1040          DA    BANKCHEK-1 
                    >1041 
            =013C   >1042 CALCEFFC EQU   *-SUBTABL4*4+4+$100 
E0CF60: 3B CE       >1043          DA    CALCEFF-1  
                    >1044 
                    >1045 *****************************************
                    >1046 *  SEGMENT CROSSOVER AREA  *
                    >1047 *****************************************
                    >1048 
            =002F   >1050 S4END    =     $E0CF91-*  
                    >1051          do    nolist     
                    >1052          LST   OFF        
                    >1053          fin              
                    >1054          ERR   *-1/$E0CF91 
E0CF62: FF FF FF FF >1055          DS    $E0CF91-*,$FF 
                    >1056 
                    >1057 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1058 * Returns with MX = 11, saves registers
                    >1059 
                    >1060 SAVEAXP4                  
E0CF91: 08          >1061          PHP              ;SAVE STATUS
E0CF92:             >1062          MX16             
E0CF92: C2 30       >1062          REP   #$30       
                    >1062          <<<              
E0CF94: 8E 63 C8    >1063          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1064          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1065          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1066          MX8              
E0CF9D: E2 30       >1066          SEP   #$30       
                    >1066          <<<              
E0CF9F: 68          >1067          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1068          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1069          RTS              
                    >1070 
                    >1071 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1072 * restores registers
                    >1073 
                    >1074 RESTAXP4                  
E0CFA4:             >1075          MEMORY8          
E0CFA4: E2 20       >1075          SEP   #$20       
                    >1075          <<<              
E0CFA6: AD 67 C8    >1076          LDA   PSAVESEG   
E0CFA9: 48          >1077          PHA              
E0CFAA:             >1078          MX16             
E0CFAA: C2 30       >1078          REP   #$30       
                    >1078          <<<              
E0CFAC: AE 63 C8    >1079          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1080          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1081          LDA   ASAVESEG   
E0CFB5: 28          >1082          PLP              
E0CFB6: 60          >1083          RTS              
                    >1084          MX    %11        
                    >1085 
                    >1086 *----------------------------------------
                    >1087 * Do a direct transfer to other segments
                    >1088 
                    >1089 JUMPSEG4                  
E0CFB7: 20 91 CF    >1090          JSR   SAVEAXP4   
E0CFBA: AC 29 C8    >1091          LDY   SLOTN0     
E0CFBD: 68          >1092          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1093          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1094          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1095          JSR   RESTAXP4   ;restore after xfer from other seg
E0CFC5: 60          >1096          RTS              ;pull destination address from stack
                    >1097 
                    >1098 * TRANSFER TO OTHER SEGMENTS
                    >1099 
                    >1100 TRANSFR4                  
                    >1101 
E0CFC6: 20 91 CF    >1102          JSR   SAVEAXP4   
E0CFC9:             >1103          MEMORY16         
E0CFC9: C2 20       >1103          REP   #$20       
                    >1103          <<<              
E0CFCB: 68          >1104          PLA              ;get return address from stack
E0CFCC: 1A          >1105          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1106          PHA              
E0CFCE:             >1107          MEMORY8          
E0CFCE: E2 20       >1107          SEP   #$20       
                    >1107          <<<              
E0CFD0: A9 04       >1108          LDA   #4          ;CURRENT SEG #
E0CFD2: 48          >1109          PHA              
E0CFD3: A0 00       >1110          LDY   #0         
E0CFD5: B3 02       >1111          LDA   (2,S),Y     ;GET CODE BYTE
E0CFD7: 48          >1112          PHA              ;SAVE CODE
E0CFD8: 29 07       >1113          AND   #$07        ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1114          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1115          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1116 * NEW SEGMENT
E0CFE0: 68          >1117          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1118          PEA   RETURN4     ;where to return to
E0CFE4: 29 F8       >1119          AND   #$F8        ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1120          LSR              
E0CFE7: 4A          >1121          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1122 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1123          TAY              
E0CFE9:             >1124          MEMORY16         
E0CFE9: C2 20       >1124          REP   #$20       
                    >1124          <<<              
E0CFEB: B9 52 CF    >1125          LDA   SUBTABL4,Y 
E0CFEE: 48          >1126          PHA              
E0CFEF: 80 B3 =CFA4 >1127          BRA   RESTAXP4   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1128          MX    %11        
                    >1129 
                    >1130 * RETURN HERE FROM SUBROUTINE
                    >1131 
            =E0CFF0 >1132 RETURN4  EQU   *-1        
E0CFF1: 20 91 CF    >1133          JSR   SAVEAXP4   
E0CFF4: 68          >1134          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1135          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1136          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1137          BRA   RESTAXP4   
                    >1138 
E0CFFD: FF FF FF    >1139          DS    \,$FF       ;PUT OBJECT AT NEXT PAGE
                     45            PUT   SEG5       
                    >2    ********************
                    >3    *      SEG5
                    >4    ********************
                    >5    
                    >6    ]segnum  =     #$0500     ;current segment number
                    >7    
                    >8             ORG   $E0C800    
                    >9    
                    >10   MSGVERS                   
E0C800: 8D 8D 8D    >11            DFB   CR,CR,CR   
E0C803: A0 A0 A0 A0 >12            ASC   "     (R)" 
E0C80B: 8D          >13            DFB   CR         
E0C80C: D0 F2 EF C4 >14            ASC   "ProDev  DDT16 Version 1.7.1" 
E0C827: 8D 8D       >15            DFB   CR,CR      
E0C829: B2 B8 AD CD >16            ASC   "28-May-2005 17:30" 
E0C83A: 8D 8D       >17            DFB   CR,CR      
E0C83C: C2 D9 BA A0 >18            ASC   "BY: Chuck Kelly" 
E0C84B: 8D 8D       >19            DFB   CR,CR      
                    >20   * ASC "Christ is the answer!"
                    >21   * Amazing how many people were afraid of this little statement.
                    >22   * Unfortunately for them, their fears do not change reality.
E0C84D: 8D 8D 8D 8D >23            DFB   CR,CR,CR,CR,CR,CR,CR,CR,CR,CR,CR,CR,CR 
E0C85A: 84          >24            DFB   EOT        
                    >25   
                    >26   
                    >27   * Copyright message for displaying in break window
                    >28   
                    >29   MSGCOPYR                  
E0C85B: 8D 8D 8D    >30            DFB   CR,CR,CR   
E0C85E: D4 E8 E9 F3 >31            ASC   "This Program" 
E0C86A: 8D          >32            DFB   CR         
E0C86B: F2 E5 EC E5 >33            ASC   "released to" 
E0C876: 8D          >34            DFB   CR         
E0C877: D0 F5 E2 EC >35            ASC   "Public Domain" 
E0C884: 8D          >36            DFB   CR         
E0C885: A0 A0 A0 A0 >37            ASC   "      by:" 
E0C88E: 8D          >38            DFB   CR         
E0C88F: A0 A0 D0 F2 >39            ASC   "  ProDev, Inc" 
E0C89C: 8D 8D       >40            DFB   CR,CR      
E0C89E: A0 A0 A0 CE >41            ASC   "   No rights" 
E0C8AA: 8D          >42            DFB   CR         
E0C8AB: A0 A0 A0 F2 >43            ASC   "   reserved" 
E0C8B6: 8D 8D 84    >44            DFB   CR,CR,EOT  
                    >45   
                    >46   
                    >47   *-------------------------------------------------
                    >48   COMMANDS                  
                    >49   
                    >50   * SEGMENT 0
E0C8B9: D4 D2 D3 D4 >51            ASC   "TRSTEXERDRJSRTONOF" 
                    >52   
                    >53   * SEGMENT 1
E0C8CB: D3 C2 C8 C2 >54            ASC   "SBHBRBRHRAMMMDM ? QU*** L LI" 
                    >55   
                    >56   * SEGMENT 2
E0C8E7: CD CF C5 D4 >57            ASC   "MOET"     
                    >58   
                    >59   * SEGMENT 3
E0C8EB: CD C1       >60            ASC   "MA"       
                    >61   
                    >62   * SEGMENT 4
E0C8ED: D4 D3 BE A0 >63            ASC   "TS> KESSSDMWPW" 
                    >64   
                    >65   * SEGMENT 5
E0C8FB: D0 BD D0 C3 >66            ASC   "P=PCA=X=Y=S=D=B=E=I=Q=GO" 
                    >67   ComdEnd                   
                    >68   
                    >69   *-------------------------------------------------
                    >70   * Command address table
                    >71   
                    >72   * The following commands are in segment 0
                    >73   
                    >74   COMDJUMP                  
E0C913: 5C CA       >75            DA    COMDTR-1   
E0C915: 67 CA       >76            DA    COMDST-1   
E0C917: 64 CA       >77            DA    COMDEX-1   
E0C919: 8A CA       >78            DA    COMDER-1   
E0C91B: CF CB       >79            DA    COMDDR-1   
E0C91D: C8 CE       >80            DA    COMDJS-1   
E0C91F: ED CE       >81            DA    COMDRT-1   
E0C921: 00 CF       >82            DA    COMDON-1   
E0C923: 14 CF       >83            DA    COMDOFF-1  
                    >84   
                    >85   * The following commands are in segment 1
                    >86   
                    >87   CMNDSEG1                  
E0C925: FF C9       >88            DA    COMDSB-1   
E0C927: AB CA       >89            DA    COMDHB-1   
E0C929: DB CA       >90            DA    COMDRB-1   
E0C92B: F6 CA       >91            DA    COMDRH-1   
E0C92D: FB CA       >92            DA    COMDRA-1   
E0C92F: 00 CB       >93            DA    COMDMM-1   
E0C931: 56 CB       >94            DA    COMDMD-1   
E0C933: 8F CB       >95            DA    CMDMENU-1  
E0C935: 8F CB       >96            DA    CMDMENU-1  
E0C937: AA CB       >97            DA    COMDQU-1   
E0C939: AE CB       >98            DA    COMDDAST-1 
E0C93B: AE CB       >99            DA    COMDDAST-1 
E0C93D: 50 CC       >100           DA    COMDLI-1   
E0C93F: 50 CC       >101           DA    COMDLI-1   
                    >102  
                    >103  * The following commands are in segment 2
                    >104  
                    >105  CMNDSEG2                  
E0C941: 36 CB       >106           DA    COMDMO-1   
E0C943: CB CB       >107           DA    COMDET-1   
                    >108  
                    >109  * The following commands are in segment 3
                    >110  
                    >111  CMNDSEG3                  
E0C945: 13 CA       >112           DA    COMDMA-1   
                    >113  
                    >114  * The following commands are in segment 4
                    >115  
                    >116  CMNDSEG4                  
E0C947: FF C9       >117           DA    COMDTS-1   
E0C949: 22 CA       >118           DA    COMDSKIP-1 
E0C94B: 46 CA       >119           DA    COMDKEY-1  
E0C94D: 5F CA       >120           DA    COMDSS-1   
E0C94F: 3A CB       >121           DA    COMDSD-1   
E0C951: 25 CD       >122           DA    COMDMW-1   
E0C953: DF CB       >123           DA    COMDPW-1   
                    >124  
                    >125  * The following commands are in segment 5
                    >126  
                    >127  CMNDSEG5                  
E0C955: 1E CB       >128           DA    COMDPE-1   
E0C957: 9B CB       >129           DA    COMDPC-1   
E0C959: C6 CB       >130           DA    COMDAE-1   
E0C95B: D0 CB       >131           DA    COMDXE-1   
E0C95D: DA CB       >132           DA    COMDYE-1   
E0C95F: E4 CB       >133           DA    COMDSE-1   
E0C961: F8 CB       >134           DA    COMDDE-1   
E0C963: 02 CC       >135           DA    COMDBE-1   
E0C965: 0D CC       >136           DA    COMDEE-1   
E0C967: 1C CC       >137           DA    COMDIE-1   
E0C969: 2B CC       >138           DA    COMDQE-1   
E0C96B: 49 CC       >139           DA    COMDGO-1   
                    >140  
                    >141  *-------------------------------------------------
                    >142  * Table used to find segment number of command
                    >143  
                    >144  ComdSegN                  
E0C96D: 11 00       >145           db    CMNDSEG1-COMDJUMP-1,0 ; Index range, segment 0
E0C96F: 2D 01       >146           db    CMNDSEG2-COMDJUMP-1,1 ; Index range, segment 1
E0C971: 31 02       >147           db    CMNDSEG3-COMDJUMP-1,2 
E0C973: 33 03       >148           db    CMNDSEG4-COMDJUMP-1,3 
E0C975: 41 04       >149           db    CMNDSEG5-COMDJUMP-1,4 
            =000A   >150  CmdTblSiz =    *-ComdSegN 
                    >151  
                    >152  *-------------------------------------------------
                    >153  * MSGFLAGS
                    >154  
                    >155  MSGFLAGS                  
E0C977: 8D          >156           DFB   CR         
E0C978: C6 EC E1 E7 >157           ASC   "Flags  NV1BDIZC" 
E0C987: 8D          >158           DFB   CR         
E0C988: D3 F4 E1 F4 >159           ASC   "Status "  
E0C98F: 84          >160           DFB   EOT        
                    >161  
                    >162  * Flags for 16 bit mode
                    >163  
                    >164  MSGFLG16                  
E0C990: 8D          >165           DFB   CR         
E0C991: C6 EC E1 E7 >166           ASC   "Flags  NVMXDIZC" 
E0C9A0: 8D          >167           DFB   CR         
E0C9A1: D3 F4 E1 F4 >168           ASC   "Status "  
E0C9A8: 84          >169           DFB   EOT        
                    >170  
                    >171  * MSGFENT
                    >172  
                    >173  MSGFENT                   
E0C9A9: 8D          >174           DFB   CR         
E0C9AA: C5 CE D4 C5 >175           ASC   "ENTER "   
E0C9B0: 84          >176           DFB   EOT        
                    >177  
                    >178  *--------------------
                    >179  * MSGCRES
                    >180  
                    >181  MSGCRES                   
E0C9B1: 8D          >182           DFB   CR         
E0C9B2: A8 F2 E5 F4 >183           ASC   "(return,esc) ?" 
E0C9C0: 84          >184           DFB   EOT        
                    >185  
                    >186  *-------------------
                    >187  * MESSAGE "BREAKPOINT"
                    >188  
                    >189  MSGBREAK                  
E0C9C1: AA AA A0 C2 >190           ASC   "** BREAK **" 
E0C9CC: 8D          >191           DFB   CR         
E0C9CD: 84          >192           DFB   EOT        
                    >193  
                    >194  
                    >195  ****************************************
                    >196  * THIS POINT MUST BE $CA00 OR ABOVE.
                    >197  ****************************************
                    >198  
                    >199           ERR   *-1/$E0CA00 
E0C9CE: FF FF FF FF >200           DS    $E0CA00-*,$FF 
                    >201  
                    >202  
                    >203  **********************************
                    >204  *       GET  COMMAND
                    >205  **********************************
                    >206  
            =0500   >207  S_GETCOM =     ]segnum    ;segment of this command
                    >208  GETCOMCR                  
E0CA00: AD 92 C8    >209           LDA   TFLAG      ;is Trace mode on?
E0CA03: D0 09 =CA0E >210           BNE   GETCOM     ;if no then skip <CR>
E0CA05: 20 C6 CF    >211           JSR   TRANSFR5   ;DO <CR>
E0CA08: 0F          >212           DFB   CROUTC     ;code
                    >213  
E0CA09: A9 BA       >214           LDA   #":"       ;load acc with ascii ":"
E0CA0B: 8D FA C8    >215           STA   PROMPT     ;store prompt
                    >216  
E0CA0E: 20 C6 CF    >217  GETCOM   JSR   TRANSFR5   ;get input line no <CR>
E0CA11: 57          >218           DFB   GETLNC     ;code byte
E0CA12: B0 EC =CA00 >219           BCS   GETCOMCR   ;if <esc> key pressed
                    >220  
                    >221  * assumes X=0 if only a return is entered
E0CA14: E8          >222           INX              ;inc. char. count
E0CA15: A0 00       >223           LDY   #00        ;clear Y
E0CA17: 20 C6 CF    >224           JSR   TRANSFR5   ;get char
E0CA1A: 01          >225           DFB   GETCHRC    ;code byte
E0CA1B: D0 0E =CA2B >226           BNE   :GETC      ;get the command
                    >227  
                    >228  * only a CR was entered so check TRACE flag
E0CA1D: AD 92 C8    >229           LDA   TFLAG      
E0CA20: F0 EC =CA0E >230           BEQ   GETCOM     ;if TFLAG not set
                    >231  
E0CA22: F4 8D CA    >232           PEA   TRACE1-1   ;address of command
E0CA25: F4 00 00    >233           PEA   S_TRACE1   ;segment number of command
E0CA28: 4C B7 CF    >234           JMP   JUMPSEG5   ;if TFLAG set
                    >235  
E0CA2B: 8D 30 C8    >236  :GETC    STA   LETTER1    
E0CA2E: B9 63 C9    >237           LDA   IN,Y       ;get next letter of command
E0CA31: C8          >238           INY              
E0CA32: CA          >239           DEX              ;sets ZFLAG when buffer empty
E0CA33: D0 04 =CA39 >240           BNE   :LTR2      
                    >241  * Only one letter was entered so fill with space in case it was
                    >242  * a single letter command
E0CA35: A9 A0       >243           LDA   #$A0       
E0CA37: E8          >244           INX              
E0CA38: 88          >245           DEY              ;point at CR so GETCHR0 works in list routine
E0CA39: 8D 31 C8    >246  :LTR2    STA   LETTER2    
E0CA3C: 8E 49 C8    >247           STX   XBUFF      
E0CA3F: A2 58       >248           LDX   #ComdEnd-COMMANDS-2 ;pointer to last command in table
                    >249  
E0CA41:             >250           memory16         
E0CA41: C2 20       >250           REP   #$20       
                    >250           <<<              
E0CA43: CD 00 C8    >251  :CHECK   CMP   $C800      ; disable DDT RAM
E0CA46: BD B9 C8    >252           lda   COMMANDS,X 
E0CA49: 8D 00 CF    >253           STA   $CF00      ; enable DDT RAM
E0CA4C: CD 30 C8    >254           cmp   LETTER1    ; does this match the user input?
E0CA4F: F0 0E =CA5F >255           beq   :FOUND     ; if yes
E0CA51: CA          >256           DEX              ; if no, try next command
E0CA52: CA          >257           DEX              
E0CA53: 10 EE =CA43 >258           BPL   :CHECK     
E0CA55:             >259           memory8          
E0CA55: E2 20       >259           SEP   #$20       
                    >259           <<<              
                    >260  
E0CA57: A9 01       >261           LDA   #INVCOM    ;invalid command error number
E0CA59: 20 EF CD    >262           JSR   ERRBEEP    
E0CA5C: 4C 00 CA    >263           JMP   GETCOMCR   
                    >264  
                    >265           MX    %01        
                    >266  * put address of command on stack
E0CA5F: CD 00 C8    >267  :FOUND   cmp   $C800      ; disable DDT RAM
E0CA62: BD 13 C9    >268           LDA   COMDJUMP,X ; get address
E0CA65: CD 00 CF    >269           CMP   $CF00      ; enable DDT RAM
E0CA68: 48          >270           PHA              ; command address
E0CA69:             >271           memory8          ; 8 bit memory
E0CA69: E2 20       >271           SEP   #$20       
                    >271           <<<              
                    >272  
E0CA6B: A9 00       >273           LDA   #0         
E0CA6D: 8D 92 C8    >274           STA   TFLAG      ;clear TFLAG
                    >275  
                    >276  * put segment number of command on stack
                    >277  
E0CA70: 8A          >278           txa              ; command pointer
E0CA71: A2 00       >279           ldx   #0         
                    >280  
E0CA73: CD 00 C8    >281  :GetSegN cmp   $C800      ; disable DDT RAM
E0CA76: DD 6D C9    >282           cmp   ComdSegN,X ; command in this range ?
E0CA79: 8D 00 CF    >283           sta   $CF00      ; enable DDT RAM
E0CA7C: 90 08 =CA86 >284           blt   :thisSeg   ; if yes
E0CA7E: E8          >285           inx              
E0CA7F: E8          >286           inx              
E0CA80: E0 0A       >287           cpx   #CmdTblSiz ; end of table ?
E0CA82: 90 EF =CA73 >288           blt   :GetSegN   ; if no
E0CA84: 80 0E =CA94 >289           bra   :seg5      ; if yes, command must be in seg 5
E0CA86: CD 00 C8    >290  :thisSeg cmp   $C800      ; disable DDT RAM
E0CA89: BD 6E C9    >291           lda   ComdSegN+1,X ; get segment number of command
E0CA8C: CD 00 CF    >292           cmp   $CF00      ; enable DDT RAM
E0CA8F: 48          >293           pha              
E0CA90: 48          >294           pha              ; JumpSeg needs word data
E0CA91: 38          >295  :toComm  sec              ; set C=1 if not SEG 5 command
E0CA92: 80 01 =CA95 >296           bra   :goComm    
E0CA94: 18          >297  :seg5    clc              ; set C=0 for SEG 5 command
                    >298  
E0CA95: 08          >299  :goComm  PHP              ; save C
E0CA96: AE 49 C8    >300           LDX   XBUFF      ; restore
E0CA99: 20 C6 CF    >301           JSR   TRANSFR5   ; get next character
E0CA9C: 01          >302           DFB   GETCHRC    ; code
E0CA9D: 8D 30 C8    >303           STA   LETTER1    ; save
E0CAA0: 28          >304           PLP              ; restore C
                    >305  
E0CAA1: E8          >306           INX              
E0CAA2: CA          >307           DEX              ;set Z bit by X
E0CAA3: 90 03 =CAA8 >308           BCC   :STAY5     ;command in SEG 5
E0CAA5: 4C B7 CF    >309           JMP   JUMPSEG5   ;go to the command in other segment
                    >310  
E0CAA8: 60          >311  :STAY5   RTS              ;use RTS to pull address and go to command
                    >312  
                    >313  *------------------------------
                    >314  * Display the version number
                    >315  * Set condition code C as follows:
                    >316  * C = 1 enter DDT
                    >317  * C = 0 return to user after init
                    >318  
                    >319  DISVERS                   
E0CAA9: F4 00 C8    >320           PEA   MSGVERS    ;message location
E0CAAC: 20 F5 CA    >321           JSR   WRITE5     ;display
                    >322  
E0CAAF: 2C 26 C8    >323           BIT   STRT2FLG   ;DID WE ENTER AT START2 ?
E0CAB2: 30 30 =CAE4 >324           BMI   :ENTER     ;IF NO
                    >325  
E0CAB4: 20 C6 CF    >326           JSR   TRANSFR5   ;Setup GS vectors, restore text screen
E0CAB7: 16          >327           DFB   RESTSTUFC  ;code
                    >328  
                    >329  * We are doing an RTL so enable the button interrupt.
E0CAB8: A9 FF       >330           LDA   #$FF       
E0CABA: 8D 26 C8    >331           STA   STRT2FLG   ;RESET FLAG
E0CABD: 8D 0D C8    >332           STA   VIAIFR     ;DISABLE OLD INTERRUPT FLAGS
E0CAC0: A9 82       >333           LDA   #%10000010 ;ENABLE BUTTON ONLY
E0CAC2: 8D 0E C8    >334           STA   VIAIER     
                    >335  
                    >336  * User entered to initialize the DDT and return.
                    >337  * Check for condition #2 return.
E0CAC5: AD 11 C8    >338           LDA   ACC        ;get contents of accumulator at entry
E0CAC8: C9 02       >339           CMP   #2         ;was condition #2 selected ?
E0CACA: D0 09 =CAD5 >340           BNE   :CK3       ;if no
                    >341  * Set return condition #2, button & BRKs not enabled, writing to card is
                    >342  * allowed, accessing vectors is OK.
E0CACC: A9 02       >343           LDA   #%00000010 ;Disable button
E0CACE: 8D 0E C8    >344           STA   VIAIER     
E0CAD1: A9 FE       >345           LDA   #%11111110 ;CB2 HI, CB1 POS EDGE, CA2 HI, CA1 NEG EDGE
E0CAD3: 80 0D =CAE2 >346           BRA   :RTSET     
                    >347  
                    >348  * Check for condition #3 return.
E0CAD5: C9 03       >349  :CK3     CMP   #3         ;was condition #3 selected ?
E0CAD7: D0 04 =CADD >350           BNE   :DEFALT    ;if no
                    >351  * Set return condition #3, button is only way back into card.
                    >352  * accessing vectors is OK, card is write protected.
E0CAD9: A9 DC       >353           LDA   #%11011100 ;CB2 LOW, CB1 POS EDGE, CA2 LOW, CA1 NEG EDGE
E0CADB: 80 05 =CAE2 >354           BRA   :RTSET     
                    >355  
                    >356  * Set default return condition, button, BRKs, writing to card all enabled
                    >357  * accessing vectors $FFE8-$FFFF turns on /INH flip-flop.
E0CADD: A9 DE       >358  :DEFALT  LDA   #%11011110 ;CB2 LOW, CB1 POS EDGE, CA2 HI, CA1 NEG EDGE
E0CADF: 8D 0C C8    >359           STA   VIAPCR     ;its OK to set this condition in non 0 SEG
                    >360  
E0CAE2: 18          >361  :RTSET   CLC              
E0CAE3: 60          >362           RTS              
                    >363  
E0CAE4: 38          >364  :ENTER   SEC              
E0CAE5: 60          >365           RTS              
                    >366  
                    >367  *---------------------------------
                    >368  *  Display the copyright notice in the breakpoint window
                    >369  
E0CAE6: 20 C6 CF    >370  DSCOPYR  JSR   TRANSFR5   ;display the break window to set the window
E0CAE9: B7          >371           DFB   DISBRKWC   ;code
                    >372  
E0CAEA: F4 5B C8    >373           PEA   MSGCOPYR   ;message location
E0CAED: 20 F5 CA    >374           JSR   WRITE5     ;display
                    >375  
E0CAF0: 20 C6 CF    >376           JSR   TRANSFR4   ;set DR window
E0CAF3: A6          >377           DFB   WINDDRC    ;code
E0CAF4: 60          >378           RTS              
                    >379  
                    >380  *---------------------------------
                    >381  * Write text to the display device
                    >382  * The address of the text is on the stack
                    >383  
                    >384  * THIS ROUTINE MUST BE ABOVE $CF00
                    >385  
E0CAF5: 8C 47 C8    >386  WRITE5   STY   YBUFF      ;SAVE
E0CAF8: A0 00       >387           LDY   #0         
                    >388  WRITLOP5                  
E0CAFA: CD 00 C8    >389           CMP   $C800      ;disable DDT RAM
E0CAFD: B3 03       >390           LDA   (3,S),Y    ;get character to display
E0CAFF: CD 00 CF    >391           CMP   $CF00      ;enable DDT RAM
E0CB02: C8          >392           INY              ;next character
E0CB03: C9 84       >393           CMP   #EOT       ;finished?
E0CB05: F0 06 =CB0D >394           BEQ   WRITDON5   ;if yes
E0CB07: 20 C6 CF    >395           JSR   TRANSFR5   ;display character
E0CB0A: 07          >396           DFB   COUTC      ;code
E0CB0B: 80 ED =CAFA >397           BRA   WRITLOP5   ;loop until done
                    >398  
                    >399  WRITDON5                  
E0CB0D:             >400           MEMORY16         
E0CB0D: C2 20       >400           REP   #$20       
                    >400           <<<              
E0CB0F: 68          >401           PLA              ;get return address
E0CB10: 83 01       >402           STA   1,S        ;free parameter space
E0CB12:             >403           MEMORY8          
E0CB12: E2 20       >403           SEP   #$20       
                    >403           <<<              
E0CB14: AC 47 C8    >404           LDY   YBUFF      ;RESTORE
E0CB17: 60          >405           RTS              
                    >406  
                    >407  *-------------------------------------------------
                    >408  * Display break
                    >409  
E0CB18: F4 C1 C9    >410  DISBREAK PEA   MSGBREAK   ;address of message
E0CB1B: 20 F5 CA    >411           JSR   WRITE5     ;DISPLAY
E0CB1E: 60          >412           RTS              
                    >413  
                    >414  *-------------------------*
                    >415  *       Command P=
                    >416  *-------------------------*
                    >417  
                    >418  COMDPE                    
E0CB1F: F0 0C =CB2D >419           BEQ   COMDPP     ;if no number follows
E0CB21: 20 C6 CF    >420           JSR   TRANSFR5   ;CHECK FOR HEX AND READ
E0CB24: 09          >421           DFB   CHKREADC   ;code
E0CB25: B0 06 =CB2D >422           BCS   COMDPP     ;IF NOT HEX
E0CB27: 8D 1E C8    >423           STA   STATUS     ;CHANGE STATUS
                    >424  PPGETCOM                  
E0CB2A: 4C 00 CA    >425           JMP   GETCOMCR   
                    >426  
                    >427  * Command is P= with no number, change individual flags,
                    >428  * display the flags
                    >429  
E0CB2D: 2C 1B C9    >430  COMDPP   BIT   EMULATE    ;Native mode ?
E0CB30: 30 05 =CB37 >431           BMI   :DO8       ;If emulation mode then display 6502 flags
E0CB32: F4 90 C9    >432           PEA   MSGFLG16   ;message for 65816 flags
E0CB35: 80 03 =CB3A >433           BRA   :SKIP8     
E0CB37: F4 77 C9    >434  :DO8     PEA   MSGFLAGS   ;message for 6502 flags
E0CB3A: 20 F5 CA    >435  :SKIP8   JSR   WRITE5     ;display flags
                    >436  
                    >437  * display the current status
E0CB3D: A2 08       >438           LDX   #8         
E0CB3F: AD 1E C8    >439           LDA   STATUS     
                    >440  DISPSTAT                  
E0CB42: 0A          >441           ASL              
E0CB43: 48          >442           PHA              
E0CB44: B0 04 =CB4A >443           BCS   FLAGON     
E0CB46: A9 B0       >444           LDA   #"0"       
E0CB48: D0 02 =CB4C >445           BNE   DISPIOR0   
E0CB4A: A9 B1       >446  FLAGON   LDA   #"1"       
                    >447  DISPIOR0                  
E0CB4C: 20 C6 CF    >448           JSR   TRANSFR5   
E0CB4F: 07          >449           DFB   COUTC      ;CODE
E0CB50: 68          >450           PLA              
E0CB51: CA          >451           DEX              
E0CB52: D0 EE =CB42 >452           BNE   DISPSTAT   
                    >453  
                    >454  * Display "ENTER"
E0CB54: F4 A9 C9    >455           PEA   MSGFENT    ;message location
E0CB57: 20 F5 CA    >456           JSR   WRITE5     ;display it
                    >457  
E0CB5A: A9 A0       >458           LDA   #$A0       
E0CB5C: 8D FA C8    >459           STA   PROMPT     
E0CB5F: 20 C6 CF    >460           JSR   TRANSFR5   ;GET INPUT NO CR
E0CB62: 57          >461           DFB   GETLNC     ;CODE
E0CB63: B0 C5 =CB2A >462           BCS   PPGETCOM   ;if "esc" key
E0CB65: A0 00       >463           LDY   #00        ;8 BITS + 1
                    >464  
                    >465  * Recognizes only 0 and 1, everything else is treated as space
                    >466  
                    >467  NEXTFLAG                  
E0CB67: BE 63 C9    >468           LDX   IN,Y       
E0CB6A: C8          >469           INY              
E0CB6B: C0 09       >470           CPY   #9         
E0CB6D: B0 BB =CB2A >471           BGE   PPGETCOM   
E0CB6F: E0 B1       >472           CPX   #"1"       
E0CB71: D0 11 =CB84 >473           BNE   CHKZERO    ;IF NOT 1
E0CB73: 98          >474           TYA              
E0CB74: AA          >475           TAX              
E0CB75: A9 00       >476           LDA   #0         
E0CB77: 38          >477           SEC              
E0CB78: 6A          >478  MOVEONE  ROR              
E0CB79: CA          >479           DEX              
E0CB7A: D0 FC =CB78 >480           BNE   MOVEONE    
E0CB7C: 0D 1E C8    >481           ORA   STATUS     
                    >482  SAVESTAT                  
E0CB7F: 8D 1E C8    >483           STA   STATUS     
E0CB82: 80 E3 =CB67 >484           BRA   NEXTFLAG   
E0CB84: E0 B0       >485  CHKZERO  CPX   #"0"       
E0CB86: D0 0E =CB96 >486           BNE   CHKRETRN   
E0CB88: 98          >487           TYA              
E0CB89: AA          >488           TAX              
E0CB8A: A9 FF       >489           LDA   #$FF       
E0CB8C: 18          >490           CLC              
                    >491  MOVEZERO                  
E0CB8D: 6A          >492           ROR              
E0CB8E: CA          >493           DEX              
E0CB8F: D0 FC =CB8D >494           BNE   MOVEZERO   
E0CB91: 2D 1E C8    >495           AND   STATUS     
E0CB94: 80 E9 =CB7F >496           BRA   SAVESTAT   
                    >497  CHKRETRN                  
E0CB96: E0 8D       >498           CPX   #CR        
E0CB98: F0 10 =CBAA >499           BEQ   OKEXIT5    
E0CB9A: D0 CB =CB67 >500           BNE   NEXTFLAG   
                    >501  
                    >502  *-----------------------*
                    >503  *  Command PC=
                    >504  *-----------------------*
                    >505  
E0CB9C: 20 C6 CF    >506  COMDPC   JSR   TRANSFR5   ;DOES DATA FOLLOW
E0CB9F: 01          >507           DFB   GETCHRC    ;code
E0CBA0: F0 05 =CBA7 >508           BEQ   TOBP5A     ;IF BAD PARAMETER
E0CBA2: 20 AF CB    >509           JSR   GETPPC     ;LOAD PC WITH DATA
E0CBA5: 90 03 =CBAA >510           BCC   OKEXIT5    ;IF DATA WAS OK 
                    >511  TOBP5A                    
E0CBA7: 4C 59 CC    >512           JMP   BPERR5     ;BAD PARAMETER ERROR
                    >513  
E0CBAA:             >514  OKEXIT5  MEMORY8          ;SET 8 BIT DATA
E0CBAA: E2 20       >514           SEP   #$20       
                    >514           <<<              
E0CBAC: 4C 00 CA    >515           JMP   GETCOMCR   
                    >516  
E0CBAF: 20 CC CD    >517  GETPPC   JSR   CKREAD16   ;CHECK FOR HEX AND READ
E0CBB2: B0 12 =CBC6 >518           BCS   :ERR       ;IF NOT HEX
E0CBB4: 8D 1F C8    >519           STA   PCLO       ;CHANGE 16 BITS OF PC
E0CBB7: 8D 3D C8    >520           STA   MEMLOW     ;SAVE 16 BITS
E0CBBA:             >521           MEMORY8          ;SET 8 BIT DATA
E0CBBA: E2 20       >521           SEP   #$20       
                    >521           <<<              
                    >522  
E0CBBC: AD 08 C9    >523           LDA   MEMPBR     ;USE JUST ENTERED BANK
E0CBBF: 8D 21 C8    >524           STA   PBR        
E0CBC2: 8D A6 C8    >525           STA   PBR8       ;special PBR for 8 bit code in non zero banks
                    >526  
E0CBC5: 18          >527           CLC              ;NO ERRORS
E0CBC6: 60          >528  :ERR     RTS              
                    >529  
                    >530  *-----------------------*
                    >531  *  Command A=
                    >532  *-----------------------*
                    >533  
E0CBC7: 20 CC CD    >534  COMDAE   JSR   CKREAD16   ;CHECK FOR HEX AND READ
E0CBCA: B0 DB =CBA7 >535           BCS   TOBP5A     ;IF NOT HEX
E0CBCC: 8D 11 C8    >536           STA   ACC        ;CHANGE ACC
E0CBCF: 80 D9 =CBAA >537           BRA   OKEXIT5    ;TO GETCOMCR
                    >538  
                    >539  *-----------------------*
                    >540  *  Command X=
                    >541  *-----------------------*
                    >542  
E0CBD1: 20 CC CD    >543  COMDXE   JSR   CKREAD16   
E0CBD4: B0 D1 =CBA7 >544           BCS   TOBP5A     
E0CBD6: 8D 13 C8    >545           STA   XREG       ;CHANGE XREG
E0CBD9: 80 CF =CBAA >546           BRA   OKEXIT5    
                    >547  
                    >548  *-------------------------*
                    >549  *  Command Y=
                    >550  *-------------------------*
                    >551  
E0CBDB: 20 CC CD    >552  COMDYE   JSR   CKREAD16   
E0CBDE: B0 C7 =CBA7 >553           BCS   TOBP5A     
E0CBE0: 8D 15 C8    >554           STA   YREG       ;CHANGE YREG
E0CBE3: 80 C5 =CBAA >555           BRA   OKEXIT5    
                    >556  
                    >557  *-------------------*
                    >558  *  Command S=
                    >559  *-------------------*
                    >560  
E0CBE5: 20 CC CD    >561  COMDSE   JSR   CKREAD16   
E0CBE8: B0 65 =CC4F >562           BCS   TOBP5      
E0CBEA: 8D 17 C8    >563           STA   STACK      ;CHANGE STACK
E0CBED:             >564           MEMORY8          ;SET 8 BIT DATA
E0CBED: E2 20       >564           SEP   #$20       
                    >564           <<<              
E0CBEF: 20 C6 CF    >565           JSR   TRANSFR5   ;UPDATE WINDOWS
E0CBF2: C7          >566           DFB   DISFMESC   ;code
E0CBF3: 20 C6 CF    >567           JSR   TRANSFR5   ;SET DR WINDOW
E0CBF6: A6          >568           DFB   WINDDRC    ;Eode
E0CBF7: 80 B1 =CBAA >569           BRA   OKEXIT5    
                    >570  
                    >571  *-----------------------*
                    >572  *  Command  D=
                    >573  *-----------------------*
                    >574  
E0CBF9: 20 CC CD    >575  COMDDE   JSR   CKREAD16   
E0CBFC: B0 51 =CC4F >576           BCS   TOBP5      
E0CBFE: 8D 19 C8    >577           STA   DREG       ;CHANGE DIRECT REGISTER
E0CC01: 80 A7 =CBAA >578           BRA   OKEXIT5    
                    >579  
                    >580  *----------------------*
                    >581  *   Command  B=
                    >582  *----------------------*
                    >583  
E0CC03: 20 C6 CF    >584  COMDBE   JSR   TRANSFR5   ;READ HEX INPUT
E0CC06: 09          >585           DFB   CHKREADC   ;code
E0CC07: B0 46 =CC4F >586           BCS   TOBP5      ;IF ERROR
E0CC09: 8D 1B C8    >587           STA   DBR        ;CHANGE DATA BANK REGISTER
E0CC0C: 80 9C =CBAA >588           BRA   OKEXIT5    
                    >589  
                    >590  *----------------------*
                    >591  *   Command  E=
                    >592  *----------------------*
                    >593  
E0CC0E: 20 C6 CF    >594  COMDEE   JSR   TRANSFR5   ;READ HEX INPUT
E0CC11: 09          >595           DFB   CHKREADC   ;code
E0CC12: B0 3B =CC4F >596           BCS   TOBP5      ;IF ERROR
E0CC14: F0 02 =CC18 >597           BEQ   :EIS0      ;IF E=0
E0CC16: A9 80       >598           LDA   #$80       ;IF E=1
E0CC18: 8D 1B C9    >599  :EIS0    STA   EMULATE    ;SET EMULATION FLAG
E0CC1B: 80 8D =CBAA >600  TOOKEX5  BRA   OKEXIT5    
                    >601  
                    >602  *----------------------*
                    >603  *   Command  I=
                    >604  *----------------------*
                    >605  
E0CC1D: 20 C6 CF    >606  COMDIE   JSR   TRANSFR5   ;READ HEX INPUT
E0CC20: 09          >607           DFB   CHKREADC   ;code
E0CC21: B0 2C =CC4F >608           BCS   TOBP5      ;IF ERROR
E0CC23: F0 02 =CC27 >609           BEQ   :IIS0      ;IF I=0
E0CC25: A9 04       >610           LDA   #$04       ;IF I=1
E0CC27: 8D A5 C8    >611  :IIS0    STA   Iflag      ;SET Iflag
E0CC2A: 80 EF =CC1B >612           BRA   TOOKEX5    
                    >613  
                    >614  *-----------------------*
                    >615  *  Command Q=
                    >616  *-----------------------*
                    >617  
E0CC2C: 20 C6 CF    >618  COMDQE   JSR   TRANSFR5   ;CHECK FOR HEX AND READ
E0CC2F: 09          >619           DFB   CHKREADC   ;code
E0CC30: B0 1D =CC4F >620           BCS   TOBP5      ;IF NOT HEX
E0CC32: 48          >621           PHA              
E0CC33: 29 80       >622           AND   #$80       ;isolate speed bit
E0CC35: 0C 36 C0    >623           TSB   SPEEDREG   ;set high speed if Qbit7=1
E0CC38: 49 80       >624           EOR   #$80       ;invert bit
E0CC3A: 1C 36 C0    >625           TRB   SPEEDREG   ;set slow speed if Qbit7=0
E0CC3D: 68          >626           PLA              
E0CC3E: 29 7F       >627           AND   #$7F       ;isolate shadow bits
E0CC40: 0C 35 C0    >628           TSB   SHADOW     ;set desired bits
E0CC43: 49 7F       >629           EOR   #$7F       ;invert bits
E0CC45: 1C 35 C0    >630           TRB   SHADOW     ;clear desired bits
E0CC48: 80 D1 =CC1B >631           BRA   TOOKEX5    ;TO GETCOMCR
                    >632  
                    >633  *--------------------------------*
                    >634  *   Command GO [A] - RUN PROGRAM *
                    >635  *--------------------------------*
                    >636  
E0CC4A: F0 05 =CC51 >637  COMDGO   BEQ   GOATPC     ;NO PC FOLLOWS, RUN AT CURRENT PC
E0CC4C: 20 AF CB    >638           JSR   GETPPC     ;LOAD PC WITH ADDRESS
E0CC4F: B0 08 =CC59 >639  TOBP5    BCS   BPERR5     ;IF NOT VALID ADDRESS
                    >640  
                    >641  * Trece 1 instruction then go
                    >642  
E0CC51: 38          >643  GOATPC   SEC              
E0CC52: 6E 9F C8    >644           ROR   GOFLAG     ;set GO flag
E0CC55: 20 C6 CF    >645           JSR   TRANSFR5   ;RUN USERS PROGRAM
E0CC58: 10          >646           DFB   STEP1C     ;code <NO RETURN>
                    >647  
                    >648  *-------------------------------------------------
E0CC59: A9 04       >649  BPERR5   LDA   #BADPAR    ;bad command parameters error number
E0CC5B: 20 EF CD    >650  TOERR5   JSR   ERRBEEP    ;ERROR
E0CC5E: 4C 00 CA    >651           JMP   GETCOMCR   
                    >652  
                    >653  *-------------------------------------------------
                    >654  * Interrupt Analyze
                    >655  *-------------------------------------------------
                    >656  
            =0500   >657  S_INTANL =     ]segnum    ;segment number of command
E0CC61: A9 73       >658  INTANLYZ LDA   #$73       
E0CC63: CD A1 C9    >659           CMP   TEMP       ;did we get here from BRKVEC ?
E0CC66: D0 5F =CCC7 >660           BNE   :V03FB     ;if not
E0CC68: 68          >661           PLA              ;get bank from JSL
                    >662  
                    >663  * We got here from the GS BRK vector. The registers have been saved by the GS.
                    >664  * Get the registers from GS RAM and put them in DDT RAM.
E0CC69:             >665           MX16             
E0CC69: C2 30       >665           REP   #$30       
                    >665           <<<              
E0CC6B: F4 00 C9    >666           PEA   #$C900     
E0CC6E: 2B          >667           PLD              ;make our RAM direct page
E0CC6F: A0 00 00    >668           LDY   #0         
                    >669  * LDAL $E10108
E0CC72: B7 B2       >670           LDA   [BRKSTUF-$E0C900],Y ;Acc
E0CC74: 8D 11 C8    >671           STA   ACC        
E0CC77: C8          >672           INY              
E0CC78: C8          >673           INY              
                    >674  * LDAL $E1010A ;X reg
E0CC79: B7 B2       >675           LDA   [BRKSTUF-$E0C900],Y 
E0CC7B: AA          >676           TAX              
E0CC7C: C8          >677           INY              
E0CC7D: C8          >678           INY              
                    >679  * LDAL $E1010C ;Y reg
E0CC7E: B7 B2       >680           LDA   [BRKSTUF-$E0C900],Y 
E0CC80: 8D 15 C8    >681           STA   YREG       
E0CC83: C8          >682           INY              
E0CC84: C8          >683           INY              
                    >684  * LDAL $E1010E
E0CC85: B7 B2       >685           LDA   [BRKSTUF-$E0C900],Y 
E0CC87: 1B          >686           TCS              ;restore to user's stack
E0CC88: C8          >687           INY              
E0CC89: C8          >688           INY              
                    >689  * LDAL $E10110
E0CC8A: B7 B2       >690           LDA   [BRKSTUF-$E0C900],Y 
E0CC8C: 8D 19 C8    >691           STA   DREG       
E0CC8F: C8          >692           INY              
E0CC90: C8          >693           INY              
                    >694  * LDAL $E10112
E0CC91: B7 B2       >695           LDA   [BRKSTUF-$E0C900],Y 
E0CC93:             >696           MEMORY8          
E0CC93: E2 20       >696           SEP   #$20       
                    >696           <<<              
E0CC95: EB          >697           XBA              
E0CC96: 8D 1B C8    >698           STA   DBR        
E0CC99: C8          >699           INY              
E0CC9A: C8          >700           INY              
                    >701  * LDAL $E10114 ;Emulation flag
E0CC9B: B7 B2       >702           LDA   [BRKSTUF-$E0C900],Y 
E0CC9D: 8D A3 C9    >703           STA   TEMP+2     
E0CCA0: C8          >704           INY              
E0CCA1: C8          >705           INY              
E0CCA2: C8          >706           INY              
E0CCA3: C8          >707           INY              
                    >708  * LDAL $E10118 ;Mstate register
E0CCA4: B7 B2       >709           LDA   [BRKSTUF-$E0C900],Y 
E0CCA6: 6A          >710           ROR              ;set Carry with CXROM status bit
E0CCA7: 6E 17 C9    >711           ROR   CXSTATUS   ;save CXROM status
E0CCAA: 0A          >712           ASL              ;insure CXROM is off
E0CCAB: 8D 68 C0    >713           STA   GS_STATE   ;restore GS state register
E0CCAE: C8          >714           INY              
E0CCAF: C8          >715           INY              
                    >716  * LDAL $E1011A ;Speed register
E0CCB0: B7 B2       >717           LDA   [BRKSTUF-$E0C900],Y 
E0CCB2: 8D 36 C0    >718           STA   SPEEDREG   ;restore GS speed register
                    >719  
E0CCB5: AC 19 C8    >720           LDY   DREG       
E0CCB8: 5A          >721           PHY              
E0CCB9: 2B          >722           PLD              ;restore D
E0CCBA: AC 15 C8    >723           LDY   YREG       ;restore Y
E0CCBD: AD A3 C9    >724           LDA   TEMP+2     ;User's emulation flag
E0CCC0: 6A          >725           ROR              
E0CCC1: FB          >726           XCE              ;restore user's state
E0CCC2: A9 80       >727           lda   #$80       
E0CCC4: 8D 92 C8    >728           sta   Tflag      ; force Trace mode on BRK
                    >729  
E0CCC7: 68          >730  :V03FB   PLA              ;get user's status
E0CCC8: 8D 1E C8    >731           STA   STATUS     ;save user's status
E0CCCB: 68          >732           PLA              ;user's pclo
E0CCCC: 8D 1F C8    >733           STA   PCLO       
E0CCCF: 68          >734           PLA              ;user's pchi
E0CCD0: 8D 20 C8    >735           STA   PCHI       
                    >736  
                    >737  * User's stack is at pre-interrupt position if user was in emualtion mode
                    >738  * so it is safe to switch to native mode.
                    >739  * Set native mode
E0CCD3: 18          >740           CLC              
E0CCD4: FB          >741           XCE              
E0CCD5: 6E 1B C9    >742           ROR   EMULATE    ;save emulation mode
E0CCD8: 30 06 =CCE0 >743           BMI   :NOPBR     ;if no PBR
E0CCDA: 68          >744           PLA              ;get PBR if it was on stack
E0CCDB: 9C A6 C8    >745           STZ   PBR8       ;clear PBR8 if native mode
E0CCDE: 80 03 =CCE3 >746           BRA   :SAVEPBR   
E0CCE0: AD A6 C8    >747  :NOPBR   LDA   PBR8       ;get 8 bit PBR
E0CCE3: 8D 21 C8    >748  :SAVEPBR STA   PBR        
                    >749  
E0CCE6:             >750           INDEX16          
E0CCE6: C2 10       >750           REP   #$10       
                    >750           <<<              
E0CCE8: 8E 13 C8    >751           STX   XREG       
E0CCEB: 8C 15 C8    >752           STY   YREG       
                    >753  
                    >754  * Is our NMI the source of the interrupt ?
E0CCEE: AD A1 C9    >755           LDA   TEMP       ;get return address
E0CCF1: C9 FD       >756           CMP   #$FD       ;did we get here from $03FB ?
E0CCF3: D0 0A =CCFF >757           BNE   :OURINT    ;if no, MUST have been a BRK
E0CCF5: AD 0D C8    >758           LDA   VIAIFR     ;check our VIA
E0CCF8: 30 05 =CCFF >759           BMI   :OURINT    ;if it is our NMI
E0CCFA: E2 40       >760           SEP   #$40       ;*** set V to indicate GS NMI ***
E0CCFC: 4C 3A CD    >761           JMP   :NOTOUR    ;if not our interrupt
                    >762  
                    >763  *-------------------------------------------------
                    >764  * The interrupt is ours so trap it.
                    >765  
E0CCFF: A9 7F       >766  :OURINT  LDA   #%01111111 ;DISABLE ALL INTERRUPTS
E0CD01: 8D 0E C8    >767           STA   VIAIER     ;ALSO CLEARS BIT 7 OF VIAIFR
                    >768  
                    >769  * Restore the interrupt vectors & set-up TEMP for SAVESTK RTS location
                    >770  
E0CD04:             >771           MX8              
E0CD04: E2 30       >771           SEP   #$30       
                    >771           <<<              
E0CD06: A2 89       >772           LDX   #BREAK-1   ;default to BRK handler
E0CD08: AD A1 C9    >773           LDA   TEMP       ;get our return address of INT vector
E0CD0B: C9 FD       >774           CMP   #$FD       ;did we come from $03FB ?
E0CD0D: D0 02 =CD11 >775           BNE   :NONMI     ;if not
E0CD0F: A2 F6       >776           LDX   #NMICONT-1 ;go to NMI handler
E0CD11: 8E A1 C9    >777  :NONMI   STX   TEMP       ;set up low byte
E0CD14: AD 28 C8    >778           LDA   SLOTCN     ;routines are in slot ROM
E0CD17: 8D A2 C9    >779           STA   TEMP+1     ;set up hi byte
                    >780  
E0CD1A: A2 03       >781           LDX   #3         
E0CD1C: 80 07 =CD25 >782           BRA   :SKIP      ;3FB vector is only 3 bytes
E0CD1E: BD A5 C9    >783  :REPEAT  LDA   V0003FB,X  
E0CD21: 9F FB 03 00 >784           STAL  $0003FB,X  
E0CD25: BD AB C9    >785  :SKIP    LDA   VE10070,X  
E0CD28: 9F 70 00 E1 >786           STAL  $E10070,X  
E0CD2C: CA          >787           DEX              
E0CD2D: 10 EF =CD1E >788           BPL   :REPEAT    ;until X < 0
E0CD2F:             >789  :ENDI    MX16             
E0CD2F: C2 30       >789           REP   #$30       
                    >789           <<<              
                    >790  
E0CD31: F4 9E CD    >791           PEA   SAVESTK-1  ;address of routine
E0CD34: F4 00 00    >792           PEA   S_SAVEST   ;segment of routine
E0CD37: 4C B7 CF    >793           JMP   JUMPSEG5   ;transfer segments
                    >794  
                    >795           MX    %11        
                    >796  
                    >797  *-------------------------------------------------
                    >798  * The interrupt is not ours or is not a BRK so restore the stuff that we
                    >799  * have messed up and return control to the GS interrupt handler.
                    >800  * Enter with: V = 1 if interrupt was caused by non DDT NMI.
                    >801  
E0CD3A: 20 C6 CF    >802  :NOTOUR  JSR   TRANSFR5   ;save ACC & Xreg to seg1 RAM
E0CD3D: 28          >803           DFB   AX2S1_AC   ;code
                    >804  
                    >805  * setup SEG 7 EX routine
E0CD3E: A9 07       >806           LDA   #$07       ;low byte needed to turn CXROM on
E0CD40: AE 17 C9    >807           LDX   CXSTATUS   ;WAS CXROM ON?
E0CD43: 30 02 =CD47 >808           BMI   :SETCX     ;IF YES
E0CD45: A9 06       >809           LDA   #$06       ;low byte needed to keep CXROM off
E0CD47: 48          >810  :SETCX   PHA              ;for IOCX7 switch
E0CD48: AD 11 C8    >811           LDA   ACC        
E0CD4B: 48          >812           PHA              ;for IOACC restore byte
                    >813  
                    >814  * Set IOPBR & IOPC to go the the proper GS interrupt handler
E0CD4C:             >815           INDEX16          
E0CD4C: C2 10       >815           REP   #$10       
                    >815           <<<              
                    >816  * V=1 if a GS NMI was the source of the interrupt
E0CD4E: 50 07 =CD57 >817           BVC   :GSINT     ;goto GS interrupt handler
                    >818  * Go the the GS NMI handler
E0CD50: A9 00       >819           LDA   #0         ;use program bank 0
E0CD52: AC A6 C9    >820           LDY   V0003FB+1  ;pc of NMI handler
E0CD55: 80 06 =CD5D >821           BRA   :SETIO     
                    >822  * Go to the GS interrupt handler
E0CD57: AD AE C9    >823  :GSINT   LDA   VE10070+3  ;program bank
E0CD5A: AC AC C9    >824           LDY   VE10070+1  ;pc of interrupt handler
E0CD5D: 48          >825  :SETIO   PHA              ;push IOPBR
E0CD5E: 5A          >826           PHY              ;push IOPC
                    >827  
E0CD5F:             >828           INDEX8           
E0CD5F: E2 10       >828           SEP   #$10       
                    >828           <<<              
                    >829  ******************************************
                    >830  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >831  ******************************************
E0CD61: AE 29 C8    >832           LDX   SLOTN0     
E0CD64: A9 76       >833           LDA   #%01110110 ;RAM7, ROM6
E0CD66: 9D 88 C0    >834           STA   SEGMBASE,X 
E0CD69: 68          >835           PLA              
E0CD6A: 8D 8B C8    >836           STA   IOPCLO     
E0CD6D: 68          >837           PLA              
E0CD6E: 8D 8C C8    >838           STA   IOPCHI     
E0CD71: 68          >839           PLA              
E0CD72: 8D 8D C8    >840           STA   IOPBR      
E0CD75: 68          >841           PLA              
E0CD76: 8D 88 C8    >842           STA   IOACC      ;set user's ACC
E0CD79: 68          >843           PLA              
E0CD7A: 8D 84 C8    >844           STA   IOCX7      ;set user's CXROM
E0CD7D: A9 28       >845           LDA   #$28       ;PLP opcode
E0CD7F: 8D 89 C8    >846           STA   IORTI      ;replace RTI with PLP
E0CD82: A9 5C       >847           LDA   #$5C       ;JML opcode
E0CD84: 8D 8A C8    >848           STA   IORTL      ;replace RTL with JML
                    >849  ******************************************
                    >850  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >851  ******************************************
E0CD87: A9 06       >852           LDA   #%00000110 ;RAM0, ROM6
E0CD89: 9D 88 C0    >853           STA   SEGMBASE,X ;RAM 0 & ROM 6
                    >854  
E0CD8C: AD 1B C9    >855           LDA   EMULATE    
E0CD8F: 2A          >856           ROL              
E0CD90: FB          >857           XCE              ;restore user's mode so stack works the same
                    >858  
E0CD91: 68          >859           PLA              ;adjust stack to pre interrupt position
E0CD92: 68          >860           PLA              
E0CD93: 68          >861           PLA              
E0CD94: 68          >862           PLA              
E0CD95: 68          >863           PLA              
                    >864  
                    >865  * Put user's stack back to post interrupt state
E0CD96: AD 1B C9    >866           LDA   EMULATE    ;test emulate flag (use LDA to keep V flag)
E0CD99: 30 04 =CD9F >867           BMI   :NOPBR2    ;if no PBR was on stack
E0CD9B: AD 21 C8    >868           LDA   PBR        
E0CD9E: 48          >869           PHA              ;restore PBR on stack
E0CD9F: AD 20 C8    >870  :NOPBR2  LDA   PCHI       ;restore PC
E0CDA2: 48          >871           PHA              
E0CDA3: AD 1F C8    >872           LDA   PCLO       
E0CDA6: 48          >873           PHA              
E0CDA7: AD 1E C8    >874           LDA   STATUS     ;pre interrupt STATUS
E0CDAA: 48          >875           PHA              ;restore status
                    >876  
                    >877  * Post interrupt status is pulled by PLP in SEG7 IO code
E0CDAB: AD A3 C9    >878           LDA   TEMP+2     ;post interrupt STATUS
E0CDAE: 09 04       >879           ORA   #$04       ;make sure I flag is set
E0CDB0: 48          >880           PHA              ;pulled in SEG7 IO code
                    >881  
E0CDB1: FB          >882           XCE              ;back to native mode & set C for TOC0N0IO
E0CDB2: AE 29 C8    >883           LDX   SLOTN0     ;set X for TOC0N0IO to use
                    >884  
E0CDB5:             >885           INDEX16          
E0CDB5: C2 10       >885           REP   #$10       
                    >885           <<<              
E0CDB7: AC 15 C8    >886           LDY   YREG       ;restore
                    >887  
E0CDBA: AD 1B C8    >888           LDA   DBR        
E0CDBD: 48          >889           PHA              ;for immediate restoration
                    >890  * Restore VIA
E0CDBE: A9 DE       >891           LDA   #%11011110 ;CB2 low, CB1 pos edge, CA2 hi, CA1 neg edge
E0CDC0: 8D 0C C8    >892           STA   VIAPCR     ;replace Apple's vectors
                    >893  
E0CDC3: A9 FA       >894           LDA   #USERINT   ;low byte
E0CDC5: 8D 27 C8    >895           STA   TOSLOT     ;setup (jmp)
E0CDC8: AB          >896           PLB              ;restore data bank register
E0CDC9: 6C 27 C8    >897           JMP   (TOSLOT)   ;goto TOC0N0IO via slot space code
                    >898  
                    >899           MX    %11        
                    >900  
                    >901  
                    >902  *----------------------------------*
                    >903  *       SUBROUTINES                *
                    >904  *----------------------------------*
                    >905  
                    >906  * READS 16 BIT HEX INPUT INTO ACC., SETS CARRY IF ERROR
                    >907  
                    >908  CKREAD16                  
E0CDCC: 20 C6 CF    >909           JSR   TRANSFR5   ;DO CHKREAD
E0CDCF: 09          >910           DFB   CHKREADC   ;code
E0CDD0: B0 05 =CDD7 >911           BCS   :ERR       ;IF ERROR
E0CDD2:             >912           MEMORY16         ;SET 16 BIT ACC
E0CDD2: C2 20       >912           REP   #$20       
                    >912           <<<              
                    >913           MX    %11        ;TELL MERLIN 16 TO STICK WITH 8 BITS
E0CDD4: AD 30 C8    >914           LDA   LETTER1    ;LOAD 16 BIT HEX
E0CDD7: 60          >915  :ERR     RTS              
                    >916  
                    >917  *----------------------------------------
                    >918  * Goto slot #1 Pascal 1.1 routines
                    >919  * Returns from slot space directly to calling routine.
                    >920  * A, X, Y all trashed.
                    >921  * Note !!! The following routine must always be called via TRANSFRx so that
                    >922  * upon returning from the I/O routines the proper segment will be selected.
                    >923  
E0CDD8: AE 28 C8    >924  PASCALIO LDX   SLOTCN     
E0CDDB: DA          >925           PHX              
E0CDDC: A2 9F       >926           LDX   #TOPASCAL  
E0CDDE: DA          >927           PHX              
E0CDDF: 2C 24 C8    >928           BIT   IOMODE     ;bit 7=1 if slot2, 6=1 if slot1
E0CDE2: 10 06 =CDEA >929           BPL   :SLOT1     
E0CDE4: A2 C2       >930           LDX   #$C2       ;slot 2
E0CDE6: A0 20       >931           LDY   #$20       
E0CDE8: 80 04 =CDEE >932           BRA   :GO        
E0CDEA: A2 C1       >933  :SLOT1   LDX   #$C1       ;slot Cn
E0CDEC: A0 10       >934           LDY   #$10       ;slot n0
E0CDEE: 60          >935  :GO      RTS              ;goto slot space routine
                    >936  
                    >937  *-------------------------------------------------
                    >938  * Beep and indicate where error is and display error number
                    >939  
E0CDEF: 48          >940  ERRBEEP  PHA              ;SAVE ERROR NUMBER
E0CDF0: 98          >941           TYA              
E0CDF1: D0 02 =CDF5 >942           BNE   YNOTZER0   
E0CDF3: A9 01       >943           LDA   #1         
                    >944  YNOTZER0                  
E0CDF5: AA          >945           TAX              ;IF Y=0 THEN 256 SPACES PRINTED
E0CDF6: 20 C6 CF    >946           JSR   TRANSFR5   ;PRINT SPACES
E0CDF9: 27          >947           DFB   PRBL2C     ;CODE
E0CDFA: A9 DE       >948           LDA   #"^"       
E0CDFC: 20 C6 CF    >949           JSR   TRANSFR5   ;INDICATE WHERE ERROR WAS
E0CDFF: 07          >950           DFB   COUTC      ;CODE
E0CE00: 20 C6 CF    >951           JSR   TRANSFR5   ;PRINT "ERR" RING BELL
E0CE03: 1F          >952           DFB   PRERRC     ;CODE
                    >953  
E0CE04: 68          >954           PLA              ;GET ERROR NUMBER
E0CE05: 20 C6 CF    >955           JSR   TRANSFR5   ;PRINT ERROR NUMBER
E0CE08: 37          >956           DFB   PRBYTEC    ;code
E0CE09: 60          >957           RTS              
                    >958  
                    >959  *------------------------------------
                    >960  * Check for access to no access renge
                    >961  *------------------------------------
                    >962  
E0CE0A: 2C 96 C8    >963  CKACCES  BIT   NOACCESS   ;N RANGES ACTIVE ?
E0CE0D: 10 64 =CE73 >964           BPL   :END       ;IF NOT
E0CE0F: AD 92 C8    >965           LDA   TFLAG      ;TRACE MODE ?
E0CE12: F0 5F =CE73 >966           BEQ   :END       ;IF NOT
                    >967  
E0CE14: A2 1E       >968           LDX   #30        
E0CE16: BD D1 C8    >969  :CHECK   LDA   PROTADR,X  ;GET PW TYPE
E0CE19: C9 CE       >970           CMP   #"N"       ;IS IT NO ACCESS ?
E0CE1B: D0 41 =CE5E >971           BNE   :NEXT      ;IF NO
E0CE1D: 20 28 CF    >972           JSR   CHKRANG    ;IS PC IN RANGE ?
E0CE20: B0 45 =CE67 >973           BCS   :IN        ;IF YES
E0CE22: AD 09 C9    >974           LDA   NUMDISP    ;# BYTES IN INST-1
E0CE25: F0 37 =CE5E >975           BEQ   :NEXT      ;ONE BYTE INSTR HAS NO EFF ADRS
E0CE27: AD B0 C9    >976           LDA   MODE       ;# MODE ?
E0CE2A: F0 32 =CE5E >977           BEQ   :NEXT      ;# MODE NO EFF ADRS
E0CE2C: C9 32       >978           CMP   #AM_A_NE*2 ;Address Mode = A with No Effective address?
E0CE2E: F0 2E =CE5E >979           BEQ   :NEXT      ;no effective address
                    >980  
                    >981  * Is EFFADRS in range ?
E0CE30: BD D2 C8    >982           LDA   PROTADR+1,X ;GET PBR
E0CE33: CD D0 C8    >983           CMP   EFFADRS+2  ;COMPARE WITH EFF PBR
E0CE36: D0 26 =CE5E >984           BNE   :NEXT      ;IF NOT IN RANGE
E0CE38: AD CF C8    >985           LDA   EFFADRS+1  ;EFF PCHI
E0CE3B: DD D3 C8    >986           CMP   PROTADR+2,X ;COMPARE WITH LOWER LIMIT PCHI
E0CE3E: 90 1E =CE5E >987           BLT   :NEXT      ;NOT IN RANGE
E0CE40: D0 0B =CE4D >988           BNE   :CHKUP     ;CHECK UPPER LIMIT
E0CE42: AD CE C8    >989           LDA   EFFADRS    ;EFF PCLO
E0CE45: DD D4 C8    >990           CMP   PROTADR+3,X ;COMPARE WITH LOWER LIMIT PCLO
E0CE48: 90 14 =CE5E >991           BLT   :NEXT      ;NOT IN RANGE
E0CE4A: AD CF C8    >992           LDA   EFFADRS+1  ;EFF PCHI
E0CE4D: DD D5 C8    >993  :CHKUP   CMP   PROTADR+4,X ;COMPARE WITH UPPER LIMIT PCHI
E0CE50: 90 15 =CE67 >994           BLT   :IN        ;IN RANGE
E0CE52: D0 0A =CE5E >995           BNE   :NEXT      ;NOT IN RANGE
E0CE54: AD CE C8    >996           LDA   EFFADRS    ;EFF PCLO
E0CE57: DD D6 C8    >997           CMP   PROTADR+5,X ;COMPARE WITH UPPER LIMIT PCLO
E0CE5A: 90 0B =CE67 >998           BLT   :IN        ;IN RANGE
E0CE5C: F0 09 =CE67 >999           BEQ   :IN        ;IN RANGE
E0CE5E: 38          >1000 :NEXT    SEC              
E0CE5F: 8A          >1001          TXA              ;GOTO NEXT PROTADR
E0CE60: E9 06       >1002          SBC   #6         
E0CE62: AA          >1003          TAX              
E0CE63: 10 B1 =CE16 >1004          BPL   :CHECK     
E0CE65: 30 0C =CE73 >1005          BMI   :END       ;NOT IN NO ACCESS RANGE
                    >1006 
                    >1007 * In no access range so display message & stop trace
                    >1008 
E0CE67: 20 C6 CF    >1009 :IN      JSR   TRANSFR5   ;DISPLAY "NO ACCESS HALT"
E0CE6A: 24          >1010          DFB   NOACMSGC   ;code
E0CE6B: A9 01       >1011          LDA   #1         ;STOP TRACE
E0CE6D: 8D 90 C8    >1012          STA   TCOUNT     
E0CE70: 9C 91 C8    >1013          STZ   TCOUNT+1   
E0CE73: 60          >1014 :END     RTS              
                    >1015 
                    >1016 
                    >1017 ******************************
                    >1018 * Part of COMDRT
                    >1019 * Come here from "RT" or because of T range in "PW", after running the
                    >1020 * JSR/JSL instruction
                    >1021 * Note ! Stack is treated as native. Will fail if user's code is 8 bit JSR
                    >1022 * & stack is at $101 or $100 before JSR.
                    >1023 
E0CE74: A9 80       >1024 SETUPRT  LDA   #$80       
E0CE76: 0C 93 C8    >1025          TSB   RTBRKFLG   ;set bit 7 = 1
E0CE79: AD 9D C8    >1026          lda   RTstatus   
E0CE7C: 8D 1E C8    >1027          sta   STATUS     ; restore user's I flag
E0CE7F:             >1028          MX16             ;16 BIT
E0CE7F: C2 30       >1028          REP   #$30       
                    >1028          <<<              
E0CE81: AE 17 C8    >1029          LDX   STACK      ;current stack
                    >1030 
                    >1031 * Get return address from stack
E0CE84: BF 01 00 00 >1032          LDAL  $1,X       ;GET RETURN ADDRESS
E0CE88: 38          >1033          SEC              
E0CE89: E9 02 00    >1034          SBC   #2         ;POINT TO JSR OPCODE
E0CE8C: 8D 18 C9    >1035          STA   LOWADD     
                    >1036 
                    >1037 * was JSR or JSL used
E0CE8F: AD 5A C8    >1038          LDA   RTSTACK    ;realtime STACK that was saved before JS
E0CE92: 38          >1039          SEC              
E0CE93: ED 17 C8    >1040          SBC   STACK      ;how many bytes were pushed
E0CE96: C9 03 00    >1041          CMP   #3         ;was JSL used?
E0CE99: 90 16 =CEB1 >1042          BLT   :JSRUSED   ;if no
E0CE9B: CE 18 C9    >1043          DEC   LOWADD     ;if yes, point to JSL opcode
E0CE9E:             >1044          MEMORY8          
E0CE9E: E2 20       >1044          SEP   #$20       
                    >1044          <<<              
E0CEA0: 2C 1B C9    >1045          BIT   EMULATE    ;is user in native mode?
E0CEA3: 10 05 =CEAA >1046          BPL   :JSLOK     ;if yes
                    >1047 * user is doing "RT" or "T" range JSL while in 8 bit mode. Set V=1 err flag
E0CEA5: E2 40       >1048          SEP   #$40       ;set V=1 as error flag
E0CEA7:             >1049          INDEX8           
E0CEA7: E2 10       >1049          SEP   #$10       
                    >1049          <<<              
E0CEA9: 60          >1050          RTS              ;leave setup
                    >1051 
E0CEAA: BF 03 00 00 >1052 :JSLOK   LDAL  $3,X       ;get return bank
E0CEAE: 8D 3C C8    >1053          STA   DBRDDT     ;data bank to access
                    >1054 
E0CEB1:             >1055 :JSRUSED MX8              ;8 BIT
E0CEB1: E2 30       >1055          SEP   #$30       
                    >1055          <<<              
E0CEB3: 6E 5D C8    >1056          ROR   RTJSRFLG   ;Bit 7=1 if JSL, 0 if JSR (C set by CMP #3)
E0CEB6: A0 00       >1057          LDY   #0         
                    >1058 
                    >1059 * See if a ProDOS MLI call or ProDOS 16 call was the last JSR/JSL executed
                    >1060 * Test for JSR $BF00
E0CEB8: 20 C6 CF    >1061          JSR   TRANSFR5   
E0CEBB: 00          >1062          DFB   LDAINDYC   ;code
E0CEBC: C9 20       >1063          CMP   #$20       ;JSR ?
E0CEBE: F0 0D =CECD >1064          BEQ   :CHKMLI    
E0CEC0: C9 22       >1065          CMP   #$22       ;JSL ?
E0CEC2: D0 28 =CEEC >1066          BNE   :NOTMLI    
                    >1067 
E0CEC4: C8          >1068          INY              
E0CEC5: 20 C6 CF    >1069          JSR   TRANSFR5   
E0CEC8: 00          >1070          DFB   LDAINDYC   ;code
E0CEC9: C9 A8       >1071          CMP   #$A8       
E0CECB: D0 1F =CEEC >1072          BNE   :NOTMLI    
                    >1073 
E0CECD: C8          >1074 :CHKMLI  INY              
E0CECE: 20 C6 CF    >1075          JSR   TRANSFR5   
E0CED1: 00          >1076          DFB   LDAINDYC   ;code
E0CED2: D0 18 =CEEC >1077          BNE   :NOTMLI    ;IF NOT $00
E0CED4: C8          >1078          INY              
E0CED5: 20 C6 CF    >1079          JSR   TRANSFR5   
E0CED8: 00          >1080          DFB   LDAINDYC   ;code
E0CED9: 2C 5D C8    >1081          BIT   RTJSRFLG   ;JSR ?
E0CEDC: 10 08 =CEE6 >1082          BPL   :CKMLI     
E0CEDE: C9 E1       >1083          CMP   #$E1       ;was it P16 ?
E0CEE0: D0 0A =CEEC >1084          BNE   :NOTMLI    ;if no
E0CEE2: C8          >1085          INY              
E0CEE3: C8          >1086          INY              
E0CEE4: 80 0D =CEF3 >1087          BRA   :P16       ;if yes
E0CEE6: C9 BF       >1088 :CKMLI   CMP   #$BF       
E0CEE8: F0 0A =CEF4 >1089          BEQ   :MLI       ;IF MLI CALL
E0CEEA: 80 00 =CEEC >1090          BRA   :NOTMLI    ;if not MLI
                    >1091 
E0CEEC: A0 FF       >1092 :NOTMLI  LDY   #$FF       ;NOT MLI SO PUT BRK AT NEXT INSTRUCTION
E0CEEE: 2C 5D C8    >1093          BIT   RTJSRFLG   ;JSR or JSL
E0CEF1: 10 01 =CEF4 >1094          BPL   :MLI       ;if JSR
E0CEF3: C8          >1095 :P16     INY              ;if JSL
                    >1096 
                    >1097 * It is a ProDos MLI call, so place a BRK at the instruction
                    >1098 * following the MLI parameters.
E0CEF4: C8          >1099 :MLI     INY              
E0CEF5: C8          >1100          INY              
E0CEF6: C8          >1101          INY              
E0CEF7: C8          >1102          INY              ;POINT TO OPCODE OF NEXT INST.
E0CEF8: 20 C6 CF    >1103          JSR   TRANSFR5   ;GET OPCODE
E0CEFB: 00          >1104          DFB   LDAINDYC   ;code
E0CEFC: F0 0F =CF0D >1105          BEQ   :ISBRK     ;IT IS A BRK, SO DON'T ALLOW REAL TIME
E0CEFE: 8D 5C C8    >1106          STA   RTOPCODE   ;SAVE OPCODE
E0CF01: A9 00       >1107          LDA   #0         
E0CF03: 20 C6 CF    >1108          JSR   TRANSFR5   ;PUT BRK
E0CF06: 08          >1109          DFB   STAINDYC   ;code
E0CF07: 20 C6 CF    >1110          JSR   TRANSFR5   ;VERIFY
E0CF0A: 00          >1111          DFB   LDAINDYC   ;code
E0CF0B: F0 02 =CF0F >1112          BEQ   :CONTINUE  ;IF OK
                    >1113 
                    >1114 * Brk did not store
E0CF0D: B8          >1115 :ISBRK   CLV              ;clear 8 bit JSL error flag
E0CF0E: 60          >1116          RTS              ;Z=1 IF ALREADY BRK, Z=0 IF NOT RAM
                    >1117 
                    >1118 :CONTINUE                 
E0CF0F: 20 C6 CF    >1119          JSR   TRANSFR5   ;START REALTIME
E0CF12: 18          >1120          DFB   EXECUTEC   ;code (NO RETURN)
                    >1121 
                    >1122 * Restore after realtime BRK
                    >1123 
E0CF13: AD 5C C8    >1124 RESTRT   LDA   RTOPCODE   ;GET SAVED OPCODE
E0CF16: A0 00       >1125          LDY   #0         
E0CF18: 20 C6 CF    >1126          JSR   TRANSFR5   ;RESTORE OPCODE AT CURRENT PC
E0CF1B: 4A          >1127          DFB   STAPCIYC   ;code
                    >1128 
E0CF1C: A9 80       >1129          LDA   #$80       
E0CF1E: 1C 93 C8    >1130          TRB   RTBRKFLG   ;CLEAR FLAG
E0CF21: 8C 9A C8    >1131          STY   PASSFLG    ;NOT REALLY A BRK
E0CF24: 2C 9C C8    >1132          BIT   COMRTFLG   ;IS THIS COMDRT (6=1) or T range (6=0) ?
E0CF27: 60          >1133          RTS              
                    >1134 
                    >1135 *------------------------------------------------------------
                    >1136 * Is the current PBR, PCHI, PCLO in this protection window limits ?
                    >1137 * SEC if yes
                    >1138 
E0CF28: BD D2 C8    >1139 CHKRANG  LDA   PROTADR+1,X ;GET PBR
E0CF2B: CD 21 C8    >1140          CMP   PBR        
E0CF2E: D0 16 =CF46 >1141          BNE   :NOTIN     ;NOT IN
E0CF30:             >1142          MEMORY16         
E0CF30: C2 20       >1142          REP   #$20       
                    >1142          <<<              
E0CF32: BD D5 C8    >1143          LDA   PROTADR+4,X ;GET UPPER LIMIT OF PC (HI,LO)
E0CF35: EB          >1144          XBA              
E0CF36: CD 1F C8    >1145          CMP   PCLO       ;COMPARE TO PC
E0CF39: 90 0B =CF46 >1146          BLT   :NOTIN     
                    >1147 
E0CF3B: BD D3 C8    >1148          LDA   PROTADR+2,X ;get lower limit of PC (HI,LO)
E0CF3E: EB          >1149          XBA              
E0CF3F: CD 1F C8    >1150          CMP   PCLO       ;compare to PC
E0CF42: 90 05 =CF49 >1151          BLT   :IN        
E0CF44: F0 03 =CF49 >1152          BEQ   :IN        
                    >1153 
E0CF46: 18          >1154 :NOTIN   CLC              
E0CF47: 80 01 =CF4A >1155          BRA   :EXIT      
E0CF49: 38          >1156 :IN      SEC              
E0CF4A:             >1157 :EXIT    MEMORY8          
E0CF4A: E2 20       >1157          SEP   #$20       
                    >1157          <<<              
E0CF4C: 60          >1158          RTS              
                    >1159 
                    >1160 *----------------------------------------
                    >1161 * Wait for 'return' or 'esc'
                    >1162 * returns C=0 on return, C=1 on esc
                    >1163 
E0CF4D: F4 B1 C9    >1164 WAITCR   PEA   MSGCRES    ;message location
E0CF50: 20 F5 CA    >1165          JSR   WRITE5     ;display it
                    >1166 
E0CF53: 20 C6 CF    >1167 :WAIT    JSR   TRANSFR5   ;GET INPUT
E0CF56: 17          >1168          DFB   RDCHARC    ;code
E0CF57: C9 9B       >1169          CMP   #ESC       ;was it 'esc' ?
E0CF59: F0 05 =CF60 >1170          BEQ   :EXIT      ;if yes (C=1)
E0CF5B: C9 8D       >1171          CMP   #CR        ;was it 'return' ?
E0CF5D: D0 F4 =CF53 >1172          BNE   :WAIT      ;if no
E0CF5F: 18          >1173          CLC              ;if yes (C=0)
E0CF60: 08          >1174 :EXIT    PHP              ;save Carry
E0CF61: 20 C6 CF    >1175          JSR   TRANSFR5   ;do carriage return
E0CF64: 0F          >1176          DFB   CROUTC     ;code
E0CF65: 28          >1177          PLP              ;restore Carry
E0CF66: 60          >1178          RTS              
                    >1179 
                    >1180 *----------------------------------------
                    >1181 ***** GLOBAL SUBROUTINES IN THIS SEGMENT *****
                    >1182 
                    >1183 SUBTABL5                  
                    >1184 
            =0105   >1185 DISBREAKC EQU  *-SUBTABL5*4+5+$100 
E0CF67: 17 CB       >1186          DA    DISBREAK-1 
                    >1187 
            =010D   >1188 LISTC    EQU   *-SUBTABL5*4+5+$100 
E0CF69: 5B CC       >1189          DA    LIST-1     
                    >1190 
            =0115   >1191 DISVERSC EQU   *-SUBTABL5*4+5+$100 
E0CF6B: A8 CA       >1192          DA    DISVERS-1  
                    >1193 
            =011D   >1194 DSCOPYRC EQU   *-SUBTABL5*4+5+$100 
E0CF6D: E5 CA       >1195          DA    DSCOPYR-1  
                    >1196 
            =0125   >1197 PASCALIOC EQU  *-SUBTABL5*4+5+$100 
E0CF6F: D7 CD       >1198          DA    PASCALIO-1 
                    >1199 
            =012D   >1200 ERRBEEPC EQU   *-SUBTABL5*4+5+$100 
E0CF71: EE CD       >1201          DA    ERRBEEP-1  
                    >1202 
            =0135   >1203 CKACCESC EQU   *-SUBTABL5*4+5+$100 
E0CF73: 09 CE       >1204          DA    CKACCES-1  
                    >1205 
            =013D   >1206 SETUPRTC EQU   *-SUBTABL5*4+5+$100 
E0CF75: 73 CE       >1207          DA    SETUPRT-1  
                    >1208 
            =0145   >1209 RESTRTC  EQU   *-SUBTABL5*4+5+$100 
E0CF77: 12 CF       >1210          DA    RESTRT-1   
                    >1211 
            =014D   >1212 CHKRANGC EQU   *-SUBTABL5*4+5+$100 
E0CF79: 27 CF       >1213          DA    CHKRANG-1  
                    >1214 
            =0155   >1215 WAITCRC  EQU   *-SUBTABL5*4+5+$100 
E0CF7B: 4C CF       >1216          DA    WAITCR-1   
                    >1217 
                    >1218 *****************************************
                    >1219 *  SEGMENT CROSSOVER AREA  *
                    >1220 *****************************************
                    >1221 
            =0014   >1223 S5END    =     $E0CF91-*  
                    >1224          do    nolist     
                    >1225          LST   OFF        
                    >1226          fin              
                    >1227          ERR   *-1/$E0CF91 
E0CF7D: FF FF FF FF >1228          DS    $E0CF91-*,$FF 
                    >1229 
                    >1230 
                    >1231 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1232 * Returns with MX = 11, saves registers
                    >1233 
                    >1234 SAVEAXP5                  
E0CF91: 08          >1235          PHP              ;SAVE STATUS
E0CF92:             >1236          MX16             
E0CF92: C2 30       >1236          REP   #$30       
                    >1236          <<<              
E0CF94: 8E 63 C8    >1237          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1238          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1239          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1240          MX8              
E0CF9D: E2 30       >1240          SEP   #$30       
                    >1240          <<<              
E0CF9F: 68          >1241          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1242          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1243          RTS              
                    >1244 
                    >1245 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1246 * restores registers
                    >1247 
                    >1248 RESTAXP5                  
E0CFA4:             >1249          MEMORY8          
E0CFA4: E2 20       >1249          SEP   #$20       
                    >1249          <<<              
E0CFA6: AD 67 C8    >1250          LDA   PSAVESEG   
E0CFA9: 48          >1251          PHA              
E0CFAA:             >1252          MX16             
E0CFAA: C2 30       >1252          REP   #$30       
                    >1252          <<<              
E0CFAC: AE 63 C8    >1253          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1254          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1255          LDA   ASAVESEG   
E0CFB5: 28          >1256          PLP              
E0CFB6: 60          >1257          RTS              
                    >1258          MX    %11        
                    >1259 
                    >1260 *----------------------------------------
                    >1261 * Do a direct transfer to other segments
                    >1262 
                    >1263 JUMPSEG5                  
E0CFB7: 20 91 CF    >1264          JSR   SAVEAXP5   
E0CFBA: AC 29 C8    >1265          LDY   SLOTN0     
E0CFBD: 68          >1266          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1267          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1268          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1269          JSR   RESTAXP5   ;restore after xfer from other seg
E0CFC5: 60          >1270          RTS              ;pull destination address from stack
                    >1271 
                    >1272 * TRANSFER TO OTHER SEGMENTS
                    >1273 
                    >1274 TRANSFR5                  
                    >1275 
E0CFC6: 20 91 CF    >1276          JSR   SAVEAXP5   
E0CFC9:             >1277          MEMORY16         
E0CFC9: C2 20       >1277          REP   #$20       
                    >1277          <<<              
E0CFCB: 68          >1278          PLA              ;get return address from stack
E0CFCC: 1A          >1279          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1280          PHA              
E0CFCE:             >1281          MEMORY8          
E0CFCE: E2 20       >1281          SEP   #$20       
                    >1281          <<<              
E0CFD0: A9 05       >1282          LDA   #5         ;CURRENT SEG #
E0CFD2: 48          >1283          PHA              
E0CFD3: A0 00       >1284          LDY   #0         
E0CFD5: B3 02       >1285          LDA   (2,S),Y    ;GET CODE BYTE
E0CFD7: 48          >1286          PHA              ;SAVE CODE
E0CFD8: 29 07       >1287          AND   #$07       ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1288          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1289          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1290 * NEW SEGMENT
E0CFE0: 68          >1291          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1292          PEA   RETURN5    ;where to return to
E0CFE4: 29 F8       >1293          AND   #$F8       ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1294          LSR              
E0CFE7: 4A          >1295          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1296 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1297          TAY              
E0CFE9:             >1298          MEMORY16         
E0CFE9: C2 20       >1298          REP   #$20       
                    >1298          <<<              
E0CFEB: B9 67 CF    >1299          LDA   SUBTABL5,Y 
E0CFEE: 48          >1300          PHA              
E0CFEF: 80 B3 =CFA4 >1301          BRA   RESTAXP5   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1302          MX    %11        
                    >1303 
                    >1304 * RETURN HERE FROM SUBROUTINE
                    >1305 
            =E0CFF0 >1306 RETURN5  EQU   *-1        
E0CFF1: 20 91 CF    >1307          JSR   SAVEAXP5   
E0CFF4: 68          >1308          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1309          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1310          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1311          BRA   RESTAXP5   
                    >1312 
E0CFFD: FF FF FF    >1313          DS    \,$FF      ;PUT OBJECT AT NEXT PAGE
                     46            PUT   SEG6       
                    >2    ******************
                    >3    *      SEG6
                    >4    ******************
                    >5    
                    >6    ]segnum  =     #$0600     ;current segment number
                    >7    
                    >8             MX    %11        
                    >9    
                    >10            ORG   $E0C800    
                    >11   
                    >12   MSGBORDR                  
E0C800: A0 FC A0 CD >13            ASC   " | M = STK REA WRI LNG BNK PG2 80S CXR  " 
E0C828: A0 FC 26    >14            DFB   " ","|",38 
E0C82B: A0 FC 26    >15            DFB   " ","|",38 
E0C82E: A0 FC A0 CB >16            ASC   " | KEY BRK TYP SAV TXT MIX HGR 80C ALT  " 
E0C856: A0 FC 26    >17            DFB   " ","|",38 
E0C859: A0 FC AD AD >18            ASC   " |---memory-------breakpoints----stack--" 
E0C881: A0 FC 0D FC >19            DFB   " ","|",13,"|",15,"|",8 
E0C888: A0 FC 0D FC >20            DFB   " ","|",13,"|",15,"|",8 
E0C88F: A0 FC 0D FC >21            DFB   " ","|",13,"|",15,"|",8 
E0C896: A0 FC 0D FC >22            DFB   " ","|",13,"|",15,"|",8 
E0C89D: A0 FC 0D FC >23            DFB   " ","|",13,"|",15,"|",8 
E0C8A4: A0 FC 0D FC >24            DFB   " ","|",13,"|",15,"|",8 
E0C8AB: A0 FC 0D FC >25            DFB   " ","|",13,"|",15,"|",8 
E0C8B2: A0 FC 0D FC >26            DFB   " ","|",13,"|",15,"|",8 
E0C8B9: A0 FC 0D FC >27            DFB   " ","|",13,"|",15,"|",8 
E0C8C0: A0 FC 0D FC >28            DFB   " ","|",13,"|",15,"|",8 
E0C8C7: A0 FC 0D FC >29            DFB   " ","|",13,"|",15,"|",7,"<",EOT 
                    >30   
                    >31   MSGBORD2                  
E0C8D0: A0 FC 0D    >32            DFB   " ","|",13 
E0C8D3: FC EE F0 F4 >33            ASC   "|npt----range---|" 
E0C8E4: 08          >34            DFB   8          
E0C8E5: A0 FC AD AD >35            ASC   " |--eff-adrs---|" 
E0C8F5: 0F FC 08    >36            DFB   15,"|",8   
E0C8F8: A0 FC 0D FC >37            DFB   " ","|",13,"|",15,"|",8 
E0C8FF: A0 FC 0D FC >38            DFB   " ","|",13,"|",15,"|",8 
E0C906: A0 FC 0C BC >39            DFB   " ","|",12,"<","|",15,"|",8 
E0C90E: A0 FC 0D FC >40            DFB   " ","|",13,"|",15,"|",8 
E0C915: A0 FC 0D FC >41            DFB   " ","|",13,"|",15,"|",EOT 
                    >42   
                    >43   **************************************************
                    >44   * TABLE1
                    >45   * The numbers from 0 to 182, are offsets to the 2 bytes
                    >46   * of the packed mnemonic in the mnemonic table. the opcode is
                    >47   * the matrix position.
                    >48   
            =E0C91C >49   TABLE1   EQU   *          
                    >50   
                    >51   *LSD-->   0 1 2 3 4 5 6 7 8 9 A B C D E F
                    >52   
E0C91C: 16 52 28 52 >53            HEX   16522852A05204526252045EA0520452 
E0C92C: 12 52 52 52 >54            HEX   125252529E5204521E52369A9E520452 
E0C93C: 42 02 40 02 >55            HEX   420240020C0276026E02766C0C027602 
E0C94C: 0E 02 02 02 >56            HEX   0E0202020C02760282022EA20C027602 
E0C95C: 7A 34 B2 34 >57            HEX   7A34B2344E344A345A344A603E344A34 
E0C96C: 1A 34 34 34 >58            HEX   1A3434344C344A34223466983E344A34 
E0C97C: 7E 00 58 00 >59            HEX   7E005800920078006800787C3E007800 
E0C98C: 1C 00 00 00 >60            HEX   1C000000920078008600729C3E007800 
E0C99C: 14 8A 18 8A >61            HEX   148A188A908A8E8A320CA65C908A8E8A 
E0C9AC: 06 8A 8A 8A >62            HEX   068A8A8A908A8E8AAC8AA8AA928A928A 
E0C9BC: 48 44 46 44 >63            HEX   48444644484446449644946A48444644 
E0C9CC: 08 44 44 44 >64            HEX   08444444484446442444A4AE48444644 
E0C9DC: 2C 26 74 26 >65            HEX   2C2674262C262E263A2630B02C262E26 
E0C9EC: 10 26 26 26 >66            HEX   1026262656262E262026648C3C262E26 
E0C9FC: 2A 80 88 80 >67            HEX   2A8088802A803680388050B42A803680 
E0CA0C: 0A 80 80 80 >68            HEX   0A80808054803680848070B642803680 
                    >69   
                    >70   ****************************************
                    >71   * THIS POINT MUST BE $CA00 OR ABOVE.
                    >72   ****************************************
                    >73   
                    >74   ***** LDA TABLE1,X *****
                    >75   
E0CA1C: CD 00 C8    >76   LTABLE1  CMP   $C800      ;DISABLE EXT RAM
E0CA1F: BD 1C C9    >77            LDA   TABLE1,X   
E0CA22: CD 00 CF    >78            CMP   $CF00      ;ENABLE EXT RAM
E0CA25: 60          >79            RTS              
                    >80   
                    >81   ***** RDKEY *****
                    >82   * Flash prompt & read char
                    >83   
                    >84   TORDCHAR                  
E0CA26: AD 03 C9    >85            LDA   CURSHORZ   
E0CA29: 4A          >86            LSR              ;DIVIDE BY 2
E0CA2A: 8D 06 C9    >87            STA   MEMHORZ    ;MEM POINTER
E0CA2D: B0 25 =CA54 >88            BCS   INMAIN     ;ODD COLUMN, MAIN MEM
                    >89   
E0CA2F: 2C 25 C8    >90            BIT   OFFFLAG    ;DON'T CHANGE PAGE2 SWITCH
E0CA32: 30 20 =CA54 >91            BMI   INMAIN     ;IF OFF
                    >92   
                    >93   * Input from aux mem
                    >94   
E0CA34: 8D 55 C0    >95   INAUX    STA   TXTPAGE2   ;AUX ON
E0CA37: AC 06 C9    >96            LDY   MEMHORZ    ;MEM POINTER
E0CA3A: B1 28       >97            LDA   (BASL),Y   ;GET EXISTING CHAR
E0CA3C: 8D 54 C0    >98            STA   TXTPAGE1   ;MAIN ON
E0CA3F: 48          >99            PHA              ;SAVE EXISTING CHAR
E0CA40: 29 A0       >100           AND   #$A0       ;ALLOW ONLY SPACE
E0CA42: 09 20       >101           ORA   #$20       ;MAKE SURE ITS SPACE
E0CA44: 49 80       >102           EOR   #$80       ;INVERT THE SPACE
E0CA46: 20 87 CA    >103           JSR   WRTAUXIN   ;WRITE AUX, DELAY FOR FLASH
                    >104  
                    >105  * Keypress will be detected with next KEYIN
                    >106  * Normal char back to screen
                    >107  
E0CA49: 68          >108           PLA              ;GET ORIG. CHAR
E0CA4A: AC 06 C9    >109           LDY   MEMHORZ    ;SCREEN MEM POINTER
E0CA4D: 20 87 CA    >110           JSR   WRTAUXIN   ;PUT NORMAL CHAR BACK, DO KEYIN
E0CA50: 30 20 =CA72 >111           BMI   KEYPRES    ;IF KEY PRESSED
E0CA52: F0 E0 =CA34 >112           BEQ   INAUX      ;<ALWAYS> KEEP LOOKING
                    >113  
                    >114  * Input from main mem
                    >115  
E0CA54: AC 06 C9    >116  INMAIN   LDY   MEMHORZ    
E0CA57: B1 28       >117           LDA   (BASL),Y   ;GET EXISTING CHAR
E0CA59: 48          >118           PHA              ;SAVE
E0CA5A: 29 A0       >119           AND   #$A0       ;ALLOW ONLY SPACE
E0CA5C: 09 20       >120           ORA   #$20       ;MAKE SURE ITS SPACE
E0CA5E: 49 80       >121           EOR   #$80       ;INVERT THE SPACE
E0CA60: 91 28       >122           STA   (BASL),Y   
E0CA62: 20 8F CA    >123           JSR   KEYIN      ;DELAY FOR FLASH RATE
                    >124  
                    >125  * Keypress detected by next KEYIN
                    >126  * Normal char back
                    >127  
E0CA65: 68          >128           PLA              ;GET ORIG CHAR
E0CA66: AC 06 C9    >129           LDY   MEMHORZ    ;SCREEN MEM POINTER
E0CA69: 91 28       >130           STA   (BASL),Y   ;PUT ORIG. CHAR BACK
E0CA6B: 20 8F CA    >131           JSR   KEYIN      ;CHECK FOR KEYPRESS
E0CA6E: 30 02 =CA72 >132           BMI   KEYPRES    
E0CA70: F0 E2 =CA54 >133           BEQ   INMAIN     ;<ALWAYS> KEEP LOOKING
            =E0CA72 >134  KEYPRES  EQU   *          
                    >135  
                    >136  * Key click
                    >137  
E0CA72: A0 0A       >138           LDY   #10        
E0CA74: A9 08       >139  KEYCLIK  LDA   #8         
E0CA76: 20 C6 CF    >140           JSR   TRANSFR6   ;WAIT
E0CA79: 7F          >141           DFB   WAITC      ;code
E0CA7A: AD 30 C0    >142           LDA   SPKR       
E0CA7D: 88          >143           DEY              
E0CA7E: D0 F4 =CA74 >144           BNE   KEYCLIK    
E0CA80: AD 00 C0    >145           LDA   KBD        ;GET KEYCODE
E0CA83: 2C 10 C0    >146           BIT   KBDSTRB    
E0CA86: 60          >147           RTS              
                    >148  
                    >149  * Display char to aux mem and fall thru to KEYIN
                    >150  
E0CA87: 8D 55 C0    >151  WRTAUXIN STA   TXTPAGE2   ;AUX ON
E0CA8A: 91 28       >152           STA   (BASL),Y   ;PUT ON SCREEN
E0CA8C: 8D 54 C0    >153           STA   TXTPAGE1   ;MAIN ON
                    >154  
                    >155  * Check for a keypress & delay for flash rate.
                    >156  * Check for keypress must be in this loop to avoid
                    >157  * a waiting for end of flash.
                    >158  
E0CA8F: A0 00       >159  KEYIN    LDY   #00        
E0CA91: A9 14       >160  KEYIN2   LDA   #20        
E0CA93: 20 C6 CF    >161           JSR   TRANSFR6   ;SMALL DELAY
E0CA96: 7F          >162           DFB   WAITC      ;code
E0CA97: 2C 00 C0    >163           BIT   KBD        ;CHECK FOR KEYPRES
E0CA9A: 30 03 =CA9F >164           BMI   KEYINRTS   ;YES KEY PRESSED
E0CA9C: 88          >165           DEY              
E0CA9D: D0 F2 =CA91 >166           BNE   KEYIN2     ;NO KEEP LOOKING
                    >167  KEYINRTS                  
E0CA9F: 60          >168           RTS              
                    >169  
                    >170  *----------------------------------------
                    >171  * DDT vectors
                    >172  
E0CAA0: 22 80 C0 E0 >173  DDT0070  JSL   $E0C080    ;the 80 is replaced with $80+n0
E0CAA4: 20 80 C0    >174  DDT3FB   JSR   $C080      ; "  "       "
                    >175  
                    >176  
                    >177  *----------------------------------------
                    >178  * Restore Stuff before executing user's program
                    >179  * Also sets up SEG 7 I/O routines
                    >180  
                    >181  RESTSTUF                  
                    >182  
                    >183  * Restore the main & aux ram switches
                    >184  * Both switches are currently set for main ram.
                    >185  
E0CAA7: AD 1C C8    >186           LDA   MSTATE     ;GET MACHINE STATE FLAG
E0CAAA: 0A          >187           ASL              
E0CAAB: 10 03 =CAB0 >188           BPL   :READM     ;IF READ FROM MAIN
E0CAAD: 8D 03 C0    >189           STA   READAUX    ;IF NOT, SET READ FROM AUX RAM
E0CAB0: 0A          >190  :READM   ASL              
E0CAB1: 10 03 =CAB6 >191           BPL   :WRITEM    ;IF WRITE TO MAIN
E0CAB3: 8D 05 C0    >192           STA   WRITAUX    ;IF NOT, SET WRITE TO AUX RAM
                    >193  :WRITEM                   
                    >194  
E0CAB6: AD A6 C8    >195           LDA   PBR8       ;PBR8 from previous instructions
E0CAB9: 48          >196           PHA              
                    >197  
E0CABA: A9 07       >198           LDA   #$07       ;low byte needed to turn CXROM on
E0CABC: 2C 17 C9    >199           BIT   CXSTATUS   ;WAS CXROM ON?
E0CABF: 30 02 =CAC3 >200           BMI   :SETCX     ;IF YES
E0CAC1: A9 06       >201           LDA   #$06       ;low byte needed to keep CXROM off
E0CAC3: 48          >202  :SETCX   PHA              ;for CXROM switch
                    >203  
E0CAC4: AD 11 C8    >204           LDA   ACC        
E0CAC7: 48          >205           PHA              ;for ACC restore byte
                    >206  
                    >207  ******************************************
                    >208  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >209  ******************************************
E0CAC8: AE 29 C8    >210           LDX   SLOTN0     
E0CACB: A9 76       >211           LDA   #%01110110 ;RAM7, ROM6
E0CACD: 9D 88 C0    >212           STA   SEGMBASE,X 
                    >213  
E0CAD0: 68          >214           PLA              
E0CAD1: 8D 88 C8    >215           STA   IOACC      ;set user's ACC
E0CAD4: 68          >216           PLA              
E0CAD5: 8D 84 C8    >217           STA   IOCX7      ;set user's CXROM
                    >218  
E0CAD8: 68          >219           PLA              ;PBR8
E0CAD9: F0 09 =CAE4 >220           BEQ   :USERTI    ;native mode or 8 bit in bank 0
E0CADB: A9 6B       >221           LDA   #$6B       ;RTL opcode
E0CADD: 8D 8A C8    >222           STA   IORTL      ;put in SEG7 IO
E0CAE0: A9 28       >223           LDA   #$28       ;PLP opcode
E0CAE2: 80 02 =CAE6 >224           BRA   :PUTCODE   
E0CAE4: A9 40       >225  :USERTI  LDA   #$40       ;RTI opcode
E0CAE6: 8D 89 C8    >226  :PUTCODE STA   IORTI      ;put opcode in SEG7 IO code
                    >227  
                    >228  ******************************************
                    >229  * !!! CAUTION !!! SEGMENT DEPENDENT CODE *
                    >230  ******************************************
E0CAE9: A9 06       >231           LDA   #%00000110 ;RAM0, ROM6
E0CAEB: 9D 88 C0    >232           STA   SEGMBASE,X 
                    >233  
                    >234  * Replace the GS vectors.
                    >235  
E0CAEE: A2 03       >236           LDX   #3         
E0CAF0: 80 19 =CB0B >237           BRA   :SKIP      ;3FB vector is only 3 bytes
E0CAF2: BF FB 03 00 >238  :REPEAT  LDAL  $0003FB,X  
E0CAF6: 9D A5 C9    >239           STA   V0003FB,X  ;save user's vector
E0CAF9: BF FB 03 01 >240           LDAL  $0103FB,X  
E0CAFD: 9D A8 C9    >241           STA   V0103FB,X  ;save AUX mem vector
E0CB00: BD A4 CA    >242           LDA   DDT3FB,X   ;get DDT vector
E0CB03: 9F FB 03 00 >243           STAL  $0003FB,X  ;replace user's vectors
E0CB07: 9F FB 03 01 >244           STAL  $0103FB,X  ;replace user's AUX vector
E0CB0B: BF 70 00 E1 >245  :SKIP    LDAL  $E10070,X  
E0CB0F: 9D AB C9    >246           STA   VE10070,X  ;save user's vector
E0CB12: BD A0 CA    >247           LDA   DDT0070,X  ;get DDT vector
E0CB15: 9F 70 00 E1 >248           STAL  $E10070,X  ;replace user's vectors
E0CB19: CA          >249           DEX              
E0CB1A: 10 D6 =CAF2 >250           BPL   :REPEAT    ;until X < 0
                    >251  * Correct for proper slot number
E0CB1C: AD 29 C8    >252           LDA   SLOTN0     
E0CB1F: 09 81       >253           ORA   #C0INT     ;create slot $80+n0
E0CB21: 8F FC 03 00 >254           STAL  $0003FB+1  
E0CB25: 8F FC 03 01 >255           STAL  $0103FB+1  
E0CB29: 8F 71 00 E1 >256           STAL  $E10070+1  
                    >257  :ENDI                     
                    >258  
                    >259  *----------------------------------------
                    >260  * If the user is in emulation mode then.
                    >261  *   Check for instructions that will alter the PBR and manually update the PBR
                    >262  
E0CB2D: AD 21 C8    >263           LDA   PBR        
E0CB30: 8D 3C C8    >264           STA   DBRDDT     ;bank to access with LDAINDY
E0CB33:             >265           INDEX16          
E0CB33: C2 10       >265           REP   #$10       
                    >265           <<<              
E0CB35: AE 1F C8    >266           LDX   PCLO       
E0CB38: 8E 18 C9    >267           STX   LOWADD     
E0CB3B:             >268           INDEX8           
E0CB3B: E2 10       >268           SEP   #$10       
                    >268           <<<              
E0CB3D: 2C 1B C9    >269           BIT   EMULATE    ;Emulation mode?
E0CB40: 10 4F =CB91 >270           BPL   :NATIVE    ;if no
E0CB42: AD 3F C8    >271           LDA   USEROPCD   ;get user's opcode
E0CB45: A0 03       >272           LDY   #$3        ;PBR offset
E0CB47: C9 5C       >273           CMP   #$5C       ;is it JML ?
E0CB49: F0 04 =CB4F >274           BEQ   :ITIS5C    ;if yes
E0CB4B: C9 22       >275           CMP   #$22       ;is instruction JSL ?
E0CB4D: D0 06 =CB55 >276           BNE   :CKDC      ;if no
                    >277  * Opcode is JML or JSL so read destination PBR
E0CB4F: 20 C6 CF    >278  :ITIS5C  JSR   TRANSFR6   
E0CB52: 00          >279           DFB   LDAINDYC   ;get PBR from instruction
E0CB53: 80 3E =CB93 >280           BRA   :SETPBR    
                    >281  
E0CB55: C9 DC       >282  :CKDC    CMP   #$DC       ;is opcode JMP [XXXX] ?
E0CB57: D0 1C =CB75 >283           BNE   :CK6B      ;if no
                    >284  * Opcode is JMP [xxxx]
E0CB59: A0 01       >285           LDY   #1         
E0CB5B: 20 C6 CF    >286           JSR   TRANSFR6   
E0CB5E: 00          >287           DFB   LDAINDYC   ;get low byte of indirect addrs
E0CB5F: 48          >288           PHA              ;save
E0CB60: C8          >289           INY              
E0CB61: 20 C6 CF    >290           JSR   TRANSFR6   
E0CB64: 00          >291           DFB   LDAINDYC   ;get hi byte of indirect addrs
E0CB65: 8D 19 C9    >292           STA   HIADD      
E0CB68: 68          >293           PLA              
E0CB69: 8D 18 C9    >294           STA   LOWADD     
E0CB6C: 9C 3C C8    >295           STZ   DBRDDT     
E0CB6F: 20 C6 CF    >296           JSR   TRANSFR6   
E0CB72: 00          >297           DFB   LDAINDYC   ;Y=2 so we read PBR
E0CB73: 80 1E =CB93 >298           BRA   :SETPBR    
                    >299  
E0CB75: C9 6B       >300  :CK6B    CMP   #$6B       ;is opcode RTL ?
E0CB77: F0 05 =CB7E >301           BEQ   :doRTL     ;if yes
E0CB79: AD A6 C8    >302           LDA   PBR8       ;keep current PBR8
E0CB7C: 80 15 =CB93 >303           BRA   :setPBR    
                    >304  * Opcode is RTL
E0CB7E:             >305  :doRTL   MX16             
E0CB7E: C2 30       >305           REP   #$30       
                    >305           <<<              
E0CB80: 3B          >306           TSC              
E0CB81: AE 17 C8    >307           LDX   STACK      
E0CB84: 9A          >308           TXS              ;restore user's stack pointer
E0CB85:             >309           MX8              
E0CB85: E2 30       >309           SEP   #$30       
                    >309           <<<              
E0CB87: 38          >310           SEC              
E0CB88: FB          >311           XCE              ;do emulation mode so stack works the same
E0CB89: FA          >312           PLX              
E0CB8A: FA          >313           PLX              
E0CB8B: FA          >314           PLX              ;get PBR from stack
E0CB8C: FB          >315           XCE              ;return to native mode
E0CB8D: 1B          >316           TCS              ;restore our stack pointer
E0CB8E: 8A          >317           TXA              
E0CB8F: 80 02 =CB93 >318           BRA   :setPBR    
E0CB91: A9 00       >319  :NATIVE  LDA   #0         ;clear PBR8 when native mode
E0CB93: 48          >320  :setPBR  PHA              ;save PBR8
                    >321  
E0CB94: AD A6 C8    >322           LDA   PBR8       ;PBR8 from previous instructions
E0CB97: F0 07 =CBA0 >323           BEQ   :NORTL     ;if RTL will not be used in SEG7IO
E0CB99:             >324           MEMORY16         
E0CB99: C2 20       >324           REP   #$20       
                    >324           <<<              
E0CB9B: CE 1F C8    >325           DEC   PCLO       ;RTL in SEG7IO will increment by 1
E0CB9E:             >326           MEMORY8          
E0CB9E: E2 20       >326           SEP   #$20       
                    >326           <<<              
E0CBA0: 68          >327  :NORTL   PLA              
E0CBA1: 8D A6 C8    >328           STA   PBR8       ;PBR8 for current instruction
                    >329  
                    >330  *----------------------------------------
                    >331  * Restore the display switches. If invisible mode is set, exchange
                    >332  * the DDT text buffer with the text screen. Make sure $C0C0 stuff is ok
                    >333  * for handling high speed traps.
                    >334  *----------------------------------------
                    >335  
                    >336  RESTTEXT                  
E0CBA4: 2C B1 C9    >337           BIT   RESTFLAG   ;HAVE DISPLAY ROUTINES BEEN USED?
E0CBA7: 10 51 =CBFA >338           BPL   SET80S     ;NO, SO SCREEN IS OK
E0CBA9: A9 00       >339           LDA   #00        
E0CBAB: 8D B1 C9    >340           STA   RESTFLAG   ;CLEAR FLAG
E0CBAE: 2C 25 C8    >341           BIT   OFFFLAG    ;IS DISPLAY TURNED OFF?
E0CBB1: 30 47 =CBFA >342           BMI   SET80S     ;IF OFF THEN SKIP
                    >343  
                    >344  * RESTORE APPLE'S BASL - BAS2H, CHANGED BY EXT SCREEN OUTPUT
E0CBB3: A2 03       >345           LDX   #3         ;4 BYTES
E0CBB5: BD FB C8    >346  :NEXT    LDA   BASBUF,X   ;GET FROM EXT BUF
E0CBB8: 95 28       >347           STA   BASL,X     ;PUT IN APPLE'S RAM
E0CBBA: CA          >348           DEX              
E0CBBB: 10 F8 =CBB5 >349           BPL   :NEXT      
                    >350  
E0CBBD: 2C 22 C8    >351           BIT   INVISIBL   ;CHECK INVISIBLE MODE FLAG
E0CBC0: 10 03 =CBC5 >352           BPL   RESTDISP   ;NOT INVISIBLE MODE SO DON'T RESTORE TEXT PAGE
                    >353  
E0CBC2: 20 99 CC    >354           JSR   EXCHTEXT   ;EXCHANGE TEXT
                    >355  
                    >356  * Restore display switches.
                    >357  * Set the following switches: 80COL, ALTCHARSET
                    >358  
E0CBC5: AD A7 C8    >359  RESTDISP LDA   DISPFLAG   ;GET FLAGS
E0CBC8: A2 0C       >360           LDX   #$C        ;SWITCH OFFSET
E0CBCA: 4A          >361  NEXTSW1  LSR              ;SET CARRY WITH BIT 0
E0CBCB: B0 05 =CBD2 >362           BCS   SWCHON1    ;TURN VIDEO SWITCH ON
E0CBCD: 9D 00 C0    >363           STA   $C000,X    ;SET SWITCH OFF
E0CBD0: 90 03 =CBD5 >364           BCC   INCSW1     ;<ALWAYS> NEXT SWITCH
E0CBD2: 9D 01 C0    >365  SWCHON1  STA   $C001,X    ;SWITCH ON
E0CBD5: E8          >366  INCSW1   INX              
E0CBD6: E8          >367           INX              ;NEXT PAIR OF SWITCHES
E0CBD7: E0 10       >368           CPX   #$10       ;ALL SET?
E0CBD9: 90 EF =CBCA >369           BLT   NEXTSW1    ;IF NO
                    >370  
                    >371  * Set the following switches: HIRES, PAGE2, MIXED, TEXT
                    >372  
E0CBDB: A2 57       >373           LDX   #$57       ;SWITCH OFFSET
E0CBDD: 4A          >374  NEXTSW2  LSR              ;SET CARRY WITH BIT0
E0CBDE: B0 05 =CBE5 >375           BCS   SWCHON2    ;TURN SWITCH ON
E0CBE0: 9D FF BF    >376           STA   $C000-1,X  ;SWITCH OFF
E0CBE3: 90 03 =CBE8 >377           BCC   DECSW1     ;<ALWAYS> NEXT SWITCH
E0CBE5: 9D 00 C0    >378  SWCHON2  STA   $C000,X    ;SET SWITCH ON
E0CBE8: CA          >379  DECSW1   DEX              
E0CBE9: CA          >380           DEX              ;NEXT SWITCH
E0CBEA: E0 50       >381           CPX   #$50       ;ALL SET?
E0CBEC: B0 EF =CBDD >382           BGE   NEXTSW2    ;IF NO
                    >383  
                    >384  * Restore Super Hi-Res display switch
E0CBEE: AD F9 C8    >385           LDA   SUPERSAV   ;Saved condition
E0CBF1: 8D 29 C0    >386           STA   SUPERHR    ;Restore
                    >387  
                    >388  * Restore the Text color
E0CBF4: AD B8 C9    >389           LDA   TEXTCLRS   ;Saved color
E0CBF7: 8D 22 C0    >390           STA   TEXTCOLR   ;Restore
                    >391  
                    >392  * Set 80 col switch always because it's changed by LDA & STA INDY
                    >393  
E0CBFA: 2C A7 C8    >394  SET80S   BIT   DISPFLAG   ;SET N BIT
E0CBFD: 30 05 =CC04 >395           BMI   SWCHON3    ;TURN SWITCH ON
E0CBFF: 8D 00 C0    >396           STA   $C000      ;80STORE OFF
E0CC02: 10 03 =CC07 >397           BPL   RESTRTS    ;<ALWAYS>
E0CC04: 8D 01 C0    >398  SWCHON3  STA   $C001      ;80STORE ON
                    >399  
E0CC07: 60          >400  RESTRTS  RTS              
                    >401  
                    >402  *-------------------------------------------------
                    >403  * Save the display switches. If invisible mdoe is set, exchange the text
                    >404  * screen with DDT text buffer.
                    >405  
                    >406  ZPAGSAVE                  
                    >407  
                    >408  * Save Apple's BASL - BAS2H, changed by DDT screen output
E0CC08: A2 03       >409           LDX   #3         ;4 BYTES
E0CC0A: B5 28       >410  :NEXT    LDA   BASL,X     ;GET FROM APPLE
E0CC0C: 9D FB C8    >411           STA   BASBUF,X   ;PUT IN EXT BUFFER
E0CC0F: CA          >412           DEX              
E0CC10: 10 F8 =CC0A >413           BPL   :NEXT      
                    >414  
                    >415  * Save the display switches
                    >416  
                    >417  * DISPFLAG format
                    >418  
                    >419  *BIT7 = 80STORE
                    >420  *BIT6 = VBL (NO USE)
                    >421  *BIT5 = TEXT
                    >422  *BIT4 = MIXED
                    >423  *BIT3 = PAGE2
                    >424  *BIT2 = HIRES
                    >425  *BIT1 = ALTCHARSET
                    >426  *BIT0 = 80COL
                    >427  
E0CC12: A9 00       >428  SAVEDISP LDA   #0         
E0CC14: 8D 76 C8    >429           STA   INITFLAG   ;CLEAR (USERS PROGRAM RUN) FLAG
E0CC17: A2 07       >430           LDX   #7         ;SWITCH OFFSET
                    >431  :SAVE                     
E0CC19: BD 18 C0    >432           LDA   $C018,X    ;GET STATUS
E0CC1C: 29 80       >433           AND   #$80       ;STRIP ALL BUT MSB
E0CC1E: 4E A7 C8    >434           LSR   DISPFLAG   ;MAKE ROOM FOR NEXT FLAG
E0CC21: 0D A7 C8    >435           ORA   DISPFLAG   ;MIX WITH OTHER FLAGS
E0CC24: 8D A7 C8    >436           STA   DISPFLAG   ;SAVE RESULT
E0CC27: CA          >437           DEX              ;DEX FLAG COUNTER
E0CC28: 10 EF =CC19 >438           BPL   :SAVE      ;MORE FLAGS
                    >439  
                    >440  * Save the Super Hi-Res switch
E0CC2A: AD 29 C0    >441           LDA   SUPERHR    
E0CC2D: 8D F9 C8    >442           STA   SUPERSAV   
                    >443  
                    >444  * Save the text color
                    >445  * LDA TEXTCOLR
                    >446  * STA TEXTCLRS
                    >447  
E0CC30: 2C 22 C8    >448           BIT   INVISIBL   ;TEST INVISIBLE MODE
E0CC33: 10 D2 =CC07 >449           BPL   RESTRTS    ;NOT INV. MODE
E0CC35: 2C 25 C8    >450           BIT   OFFFLAG    ;IS DISPLAY OFF ?
E0CC38: 30 CD =CC07 >451           BMI   RESTRTS    ;IF OFF, SKIP EXCHANGE
                    >452  
E0CC3A: 20 99 CC    >453           JSR   EXCHTEXT   ;EXCHANGE TEXT WITH EXT BUF
                    >454  
E0CC3D: 4C C5 CB    >455           JMP   RESTDISP   ;RESTORE DISPLAY SWITCHES & RTS
                    >456  
                    >457  ***** SETMSTAT *****
                    >458  * Memory state register (not the same as EDM ROMS or IIGS)
                    >459  * used as indicator and for BANKCHEK, sets to current memory
                    >460  * state so must be run before anything is changed.
                    >461  
                    >462  * M=
                    >463  * BIT 0=1 IF INTERNAL ROM ON ($C100-$CFFF) CXROM {$C015}
                    >464  * BIT 1=1 IF 80 STORE ON {$C018}
                    >465  * BIT 2=1 IF PAGE 2 ON {$C01C}
                    >466  * BIT 3=1 IF LC BANK 2 IS IN  0= BANK 1 {$C011}
                    >467  * BIT 4=1 IF LC IS BANKED IN  0= AUTOSTART ROM {$C012}
                    >468  * BIT 5=1 IF AUX RAM BEING WRITTEN TO ($200-$BFFF) {$C014}
                    >469  * BIT 6=1 IF AUX RAM BEING READ FROM ($200-$BFFF) {$C013}
                    >470  * BIT 7=1 IF AUX STACK & ZP & LC ON {$C016}
                    >471  
                    >472  * XOFFSET ; OFFSETS TO VARIOUS FLAG POSITIONS
                    >473  
E0CC40: 05 02 03 01 >474  XOFFSET  HEX   05020301000B07 
                    >475  
                    >476  * Determine MSTATE
                    >477  * Set bit 0 from stored info
                    >478  
E0CC47: AD 17 C9    >479  SETMSTAT LDA   CXSTATUS   ;IS CXROM ON ?
E0CC4A: 2A          >480           ROL              
E0CC4B: 6E 1C C8    >481  :CXOFF   ROR   MSTATE     ;SET BIT 0
                    >482  
                    >483  * Set bit 1-7 from current switches
                    >484  
E0CC4E: A0 06       >485           LDY   #6         
E0CC50: BE 40 CC    >486  :SETM    LDX   XOFFSET,Y  
E0CC53: BD 11 C0    >487           LDA   $C011,X    
E0CC56: 2A          >488           ROL              
E0CC57: 6E 1C C8    >489  :NOTSET  ROR   MSTATE     
E0CC5A: 88          >490           DEY              
E0CC5B: 10 F3 =CC50 >491           BPL   :SETM      
                    >492  
                    >493  **** Set RAMRD and RAMWRT switches to main RAM ****
E0CC5D: 8D 02 C0    >494           STA   READMAIN   ;READ FROM MAIN RAM
E0CC60: 8D 04 C0    >495           STA   WRITMAIN   ;WRITE TO MAIN RAM
                    >496  
E0CC63: 60          >497           RTS              
                    >498  
                    >499  ***** SETMPBR *****
                    >500  * Do SETMSTAT and BANKCHEK
                    >501  
E0CC64: 20 47 CC    >502  SETMPBR  JSR   SETMSTAT   
E0CC67: AE 1B C8    >503           LDX   DBR        
E0CC6A: DA          >504           PHX              ;SAVE
E0CC6B: 9C 1B C8    >505           STZ   DBR        
E0CC6E: 20 C6 CF    >506           JSR   TRANSFR6   ;BANKCHEK
E0CC71: 34          >507           DFB   BANKCHEKC  ;code
E0CC72: 8D 08 C9    >508           STA   MEMPBR     ;SET PBR
E0CC75: FA          >509           PLX              
E0CC76: 8E 1B C8    >510           STX   DBR        ;RESTORE DBR
E0CC79: 60          >511           RTS              ;ACC = MEMPBR
                    >512  
                    >513  
                    >514  *------------------------------------
                    >515  *   SETPBR -  Set PBR if emulation mode & PBR is 00 or 01 set INITFLAG
                    >516  *  If the PBR is other than 00 or 01 then the user might be running 8 bit
                    >517  *  code in other banks, so don't change the PBR.
                    >518  
E0CC7A: AD 20 C8    >519  SETPBR   LDA   PCHI       
E0CC7D: 8D 3E C8    >520           STA   MEMHI      ;USED BY SETMPBR
E0CC80: 2C 1B C9    >521           BIT   EMULATE    
E0CC83: 10 0D =CC92 >522           BPL   :PBROK     
                    >523  
                    >524  * If emulation mode, is PBR 00 or 01 ?
E0CC85: AD 21 C8    >525           LDA   PBR        
E0CC88: 29 FE       >526           AND   #$FE       
E0CC8A: D0 06 =CC92 >527           BNE   :PBROK     ;PBR is not 00 or 01 so don't change
                    >528  
                    >529  * Use setmpbr to set PBR.
E0CC8C: 20 64 CC    >530           JSR   SETMPBR    ;DO SETMSTAT & BANKCHEK
E0CC8F: 8D 21 C8    >531           STA   PBR        
                    >532  
E0CC92: A9 FF       >533  :PBROK   LDA   #$FF       
E0CC94: 8D 76 C8    >534           STA   INITFLAG   ;SET FLAG THAT USER'S PROGRAM HAS BEEN RUN.
E0CC97: D8          >535           CLD              
E0CC98: 60          >536           RTS              
                    >537  
                    >538  
                    >539  * SUBROUTINES USED ABOVE
                    >540  
                    >541  *-------------------------------------------------
                    >542  * Exchange text RAM area with DDT RAM
                    >543  
                    >544  EXCHTEXT                  
                    >545  
                    >546  * Initialize pointers and RAM
E0CC99: A2 05       >547           LDX   #$5        
E0CC9B: B5 20       >548  :SAVE    LDA   $20,X      ;SAVE Z PAGE
E0CC9D: 9D 4E C8    >549           STA   ZPAGEXT,X  ;USED WHEN SAVING TEXT RAM
E0CCA0: CA          >550           DEX              
E0CCA1: 10 F8 =CC9B >551           BPL   :SAVE      
                    >552  
E0CCA3: A9 00       >553           LDA   #0         
E0CCA5: 85 20       >554           STA   Z1LO       
E0CCA7: A9 04       >555           LDA   #$04       
E0CCA9: 85 21       >556           STA   Z1HI       ;$400
E0CCAB: A9 11       >557           LDA   #$11       ;$1-$10 ARE VIA
E0CCAD: 85 22       >558           STA   Z2LO       
E0CCAF: A9 C8       >559           LDA   #$C8       
E0CCB1: 85 23       >560           STA   Z2HI       ;$C810
E0CCB3: AE 29 C8    >561           LDX   SLOTN0     
E0CCB6: 86 24       >562           STX   ZBUF5      ;SAVE TO Z PAGE
                    >563  
                    >564  *********************************
                    >565  *   W A R N I N G
                    >566  * SEGMENT DEPENDENT CODE
                    >567  *********************************
                    >568  
E0CCB8: A9 26       >569           LDA   #%00100110 ;RAM2, ROM6
E0CCBA: 9D 88 C0    >570           STA   SEGMBASE,X 
E0CCBD: 85 25       >571           STA   ZBUF6      ;SAVE SEG#
E0CCBF: A2 00       >572           LDX   #00        
E0CCC1: A0 00       >573           LDY   #00        
E0CCC3: 8D 01 C0    >574           STA   STR80ON    ;ENABLE AUX ACCESS
E0CCC6: 8D 54 C0    >575           STA   TXTPAGE1   ;SELECT MAIN TEXT RAM
                    >576  
E0CCC9: B1 20       >577  SAVENEXT LDA   (Z1LO),Y   ;GET FROM SCREEN
E0CCCB: 48          >578           PHA              
E0CCCC: A1 22       >579           LDA   (Z2LO,X)   ;GET FROM EXT RAM
E0CCCE: 91 20       >580           STA   (Z1LO),Y   ;PUT ON SCREEN
E0CCD0: 68          >581           PLA              ;GET SCREEN VALUE
E0CCD1: 81 22       >582           STA   (Z2LO,X)   ;SAVE TO EXT RAM
E0CCD3: 20 14 CD    >583           JSR   SVTXTINC   ;RETURNS WITH CARRY SET WHEN DONE
                    >584  
                    >585  * Exchange the aux mem portion of 80 col disp.
                    >586  
E0CCD6: 8D 55 C0    >587           STA   TXTPAGE2   ;SELECT AUX MEM
E0CCD9: B1 20       >588           LDA   (Z1LO),Y   ;GET FROM SCREEN
E0CCDB: 48          >589           PHA              
E0CCDC: A1 22       >590           LDA   (Z2LO,X)   ;GET FROM EXT RAM
E0CCDE: 91 20       >591           STA   (Z1LO),Y   ;PUT ON SCREEN
E0CCE0: 68          >592           PLA              ;GET SCREEN VALUE
E0CCE1: 81 22       >593           STA   (Z2LO,X)   ;SAVE TO EXT RAM
E0CCE3: 8D 54 C0    >594           STA   TXTPAGE1   ;SELECT MAIN MEM
E0CCE6: 20 FD CC    >595           JSR   INCTEXT    
E0CCE9: 90 DE =CCC9 >596           BCC   SAVENEXT   
                    >597  
                    >598  * RETURN RAM TO SEG 0
                    >599  
E0CCEB: A6 24       >600           LDX   ZBUF5      ;GET SLOTN0 FROM Z PAGE BUFFER
                    >601  *********************************
                    >602  *  W A R N I N G
                    >603  * THIS IS SEGMENT DEPENDENT CODE
                    >604  *********************************
E0CCED: A9 06       >605           LDA   #%00000110 ;RAM0, ROM6
E0CCEF: 9D 88 C0    >606           STA   SEGMBASE,X 
                    >607  
                    >608  * Restore Z page locations
                    >609  
E0CCF2: A2 05       >610           LDX   #$5        
                    >611  :REST                     
E0CCF4: BD 4E C8    >612           LDA   ZPAGEXT,X  
E0CCF7: 95 20       >613           STA   $20,X      ;RESTORE Z PAGE
E0CCF9: CA          >614           DEX              
E0CCFA: 10 F8 =CCF4 >615           BPL   :REST      
                    >616  
E0CCFC: 60          >617           RTS              
                    >618  
                    >619  * Inc. screen pointer
                    >620  
E0CCFD: C8          >621  INCTEXT  INY              
E0CCFE: C0 79       >622           CPY   #$79       
E0CD00: 90 12 =CD14 >623           BLT   SVTXTINC   
E0CD02: C0 80       >624           CPY   #$80       
E0CD04: 90 F7 =CCFD >625           BLT   INCTEXT    
E0CD06: C0 F9       >626           CPY   #$F9       
E0CD08: 90 0A =CD14 >627           BLT   SVTXTINC   
E0CD0A: E6 21       >628           INC   Z1HI       
E0CD0C: A5 21       >629           LDA   Z1HI       
E0CD0E: C9 08       >630           CMP   #$08       
E0CD10: B0 28 =CD3A >631           BGE   NEXTTEXT   ;CARRY SET
E0CD12: A0 00       >632           LDY   #0         
                    >633  
E0CD14: 18          >634  SVTXTINC CLC              
E0CD15: A5 22       >635           LDA   Z2LO       
E0CD17: 69 01       >636           ADC   #1         
E0CD19: 85 22       >637           STA   Z2LO       ;INC EXT RAM POINTER
E0CD1B: A5 23       >638           LDA   Z2HI       
E0CD1D: 69 00       >639           ADC   #0         
E0CD1F: C9 CA       >640           CMP   #$CA       
E0CD21: 90 14 =CD37 >641           BLT   THISSEG    
E0CD23: A6 24       >642           LDX   ZBUF5      ;GET FROM Z PAGE BUFFER
E0CD25: A5 25       >643           LDA   ZBUF6      ;GET LAST SEG# USED
E0CD27: 18          >644           CLC              
E0CD28: 69 10       >645           ADC   #%00010000 ;NEXT RAM SEG
E0CD2A: 85 25       >646           STA   ZBUF6      ;SAVE
E0CD2C: 9D 88 C0    >647           STA   SEGMBASE,X 
E0CD2F: A2 00       >648           LDX   #0         ;RESET
E0CD31: A9 11       >649           LDA   #$11       ; $C801 - $C810 ARE VIA
E0CD33: 85 22       >650           STA   Z2LO       
E0CD35: A9 C8       >651           LDA   #$C8       
E0CD37: 85 23       >652  THISSEG  STA   Z2HI       
E0CD39: 18          >653           CLC              
E0CD3A: 60          >654  NEXTTEXT RTS              
                    >655  
                    >656  *********************************
                    >657  * Initialize DDT RAM
                    >658  *********************************
                    >659  
E0CD3B: A9 00       >660  INITRAMV LDA   #0         
E0CD3D: 8D 21 C8    >661           STA   PBR        ;DEFAULT TO BANK 0
E0CD40: A9 FF       >662           LDA   #>MONITOR  ; -SET UP PCHI & PCLO
E0CD42: 8D 20 C8    >663           STA   PCHI       ; - TO RETURN TO MONITOR IF GO COMMAND IS
E0CD45: 8D 3E C8    >664           STA   MEMHI      ; FOR BANKCHEK
E0CD48: A9 69       >665           LDA   #MONITOR   ; - GIVEN WITHOUT CHANGING THE PROGRAM COUNTER
E0CD4A: 8D 1F C8    >666           STA   PCLO       ; - AFTER ENTERING AT START1.
                    >667  
                    >668  * Was card selected by PR#n or IN#n
                    >669  
E0CD4D: AD 28 C8    >670           LDA   SLOTCN     ;GET SLOT NUMBER CN
E0CD50: C5 37       >671           CMP   CSWH       ;WAS PR#N USED ?
E0CD52: D0 08 =CD5C >672           BNE   CHKKSW     ;IF NO
E0CD54: A9 F0       >673           LDA   #COUT1APL  ;LOW ADDRESS BYTE
E0CD56: 85 36       >674           STA   CSWL       ;PUT COUT1 ADDRESS IN
E0CD58: A9 FD       >675           LDA   #>COUT1APL 
E0CD5A: 85 37       >676           STA   CSWH       
E0CD5C: AD 28 C8    >677  CHKKSW   LDA   SLOTCN     ;GET SLOT NUMBER CN
E0CD5F: C5 39       >678           CMP   KSWH       ;WAS IN#N USED
E0CD61: D0 08 =CD6B >679           BNE   SETUP      ;IF NO
E0CD63: A9 8F       >680           LDA   #KEYIN     ;PUT KEYIN ADDRESS IN
E0CD65: 85 38       >681           STA   KSWL       
E0CD67: A9 CA       >682           LDA   #>KEYIN    
E0CD69: 85 39       >683           STA   KSWH       
                    >684  
                    >685  * Set display mode
                    >686  
E0CD6B: AD 22 C0    >687  SETUP    LDA   TEXTCOLR   ;get user's text colors
E0CD6E: 8D B8 C9    >688           STA   TEXTCLRS   ;save for DDT use
E0CD71: A2 68       >689           LDX   #POINT-TCOUNT ;CLEAR EXT RAM FROM TCOUNT TO POINT
E0CD73: A9 00       >690           LDA   #00        
E0CD75: 8D 24 C8    >691           STA   IOMODE     ;SET TO SCREEN I/O
E0CD78: 8D 25 C8    >692           STA   OFFFLAG    ;DISPLAY ON
E0CD7B: 9D 90 C8    >693  :CLREXT  STA   TCOUNT,X   
E0CD7E: CA          >694           DEX              
E0CD7F: 10 FA =CD7B >695           BPL   :CLREXT    
E0CD81: A9 80       >696           LDA   #$80       ;DEFAULT SETUP
E0CD83: 8D 22 C8    >697           STA   INVISIBL   ;SO TEXT RAM IS SAVED DURING INITIALIZATION
E0CD86: A9 93       >698           LDA   #CTRLS     
E0CD88: 8D BA C9    >699           STA   KEY        ;SET STOP KEY TO CTRL-S
E0CD8B: A9 40       >700           LDA   #$40       
E0CD8D: 8D 23 C8    >701           STA   CMOSFLAG   ;SET 65816 TYPE
                    >702  
                    >703  * Initialize VIA
                    >704  
E0CD90: A9 7F       >705           LDA   #%01111111 ;DISABLE INTERRUPTS
E0CD92: 8D 0E C8    >706           STA   VIAIER     
E0CD95: A9 FF       >707           LDA   #$FF       
E0CD97: 8D 03 C8    >708           STA   VIADRA     ;MAKE ALL A LINES OUTPUTS
E0CD9A: 8D 02 C8    >709           STA   VIADRB     ;" " " B " "
E0CD9D: A9 00       >710           LDA   #0         
E0CD9F: 8D 0B C8    >711           STA   VIAACR     ;SET UP TIMERS
E0CDA2: A9 FE       >712           LDA   #%11111110 ;DON'T REPLACE APPLE'S VECTORS WHILE IN EXTERM
E0CDA4: 8D 0C C8    >713           STA   VIAPCR     ;SET UP CA1,CA2,CB1
E0CDA7: A9 82       >714           LDA   #%10000010 
E0CDA9: 8D 43 C8    >715           STA   IERBUFF    ;INTERRUPTS TO ENABLE
                    >716  
                    >717  * Move interrupt, CXROM routines to DDT RAM
                    >718  
E0CDAC: 20 C6 CF    >719           JSR   TRANSFR6   
E0CDAF: 1A          >720           DFB   ROMTORAMC  ;code
E0CDB0: 80 15 =CDC7 >721           BRA   INITCONT   
                    >722  
                    >723  *-------------------------------------------------
                    >724  * WARM ENTRY COMES HERE
                    >725  * Check the GS ^Y vector and restore if necessary
                    >726  
E0CDB2: AF FA 03 00 >727  WARMINIT LDAL  $0003FA    ;GS ^Y slot number
E0CDB6: CD 28 C8    >728           CMP   SLOTCN     ;does it point to our slot?
E0CDB9: D0 0C =CDC7 >729           BNE   INITCONT   ;if no
E0CDBB: A2 02       >730           LDX   #2         ;3 bytes to restore
E0CDBD: BD B5 C9    >731  :REPEAT  LDA   DDT3F8,X   ;get user's ^Y vector
E0CDC0: 9F F8 03 00 >732           STAL  $0003F8,X  ;restore GS ^Y
E0CDC4: CA          >733           DEX              
E0CDC5: 10 F6 =CDBD >734           BPL   :REPEAT    
                    >735  
E0CDC7: 20 08 CC    >736  INITCONT JSR   ZPAGSAVE   ;SAVE DISPLAY SWITCHES
E0CDCA: 20 64 CC    >737           JSR   SETMPBR    ;SET MSTATE & PBR
E0CDCD: 20 84 CE    >738           JSR   DISPON     ;TURN DISPLAY ON
E0CDD0: 20 C6 CF    >739           JSR   TRANSFR6   ;display copyright
E0CDD3: 1D          >740           DFB   DSCOPYRC   ;code
E0CDD4: AD 17 C8    >741           LDA   STACK      
E0CDD7: 8D 5E C8    >742           STA   OLDSTACK   ;INIT FOR STACK DISPLAY
E0CDDA: 60          >743           RTS              
                    >744  
                    >745  *-------------------------------------------------
                    >746  * Display window borders
                    >747  
                    >748  DSPBORDR                  
                    >749  
                    >750  * Don't display if not screen I/O
E0CDDB: AD 24 C8    >751           LDA   IOMODE     
E0CDDE: D0 26 =CE06 >752           BNE   :END       
                    >753  
                    >754  * Set full screen window with left edge in col 42
                    >755  
E0CDE0: A9 00       >756           LDA   #0         
E0CDE2: 8D 01 C9    >757           STA   WINDTOP    
E0CDE5: A9 28       >758           LDA   #40        
E0CDE7: 8D FF C8    >759           STA   WINDLEFT   
E0CDEA: 8D 00 C9    >760           STA   WINDWDTH   
E0CDED: A9 18       >761           LDA   #24        
E0CDEF: 8D 02 C9    >762           STA   WINDBTM    
E0CDF2: 20 C6 CF    >763           JSR   TRANSFR6   ;HOME
E0CDF5: 9F          >764           DFB   HOMEC      ;code
                    >765  
                    >766  * Display borders
                    >767  
E0CDF6: F4 00 C8    >768           PEA   MSGBORDR   ;message location
E0CDF9: 20 07 CE    >769           JSR   WRITE6     ;display it
E0CDFC: F4 D0 C8    >770           PEA   MSGBORD2   ;message part 2
E0CDFF: 20 07 CE    >771           JSR   WRITE6     ;display it
                    >772  
E0CE02: 20 C6 CF    >773           JSR   TRANSFR6   ;CLEAR LOWER RIGHT CORNER
E0CE05: 6F          >774           DFB   CLREOLC    ;code
                    >775  
E0CE06: 60          >776  :END     RTS              
                    >777  
                    >778  ****************************************
                    >779  * MUST BE BEFORE $CF00
                    >780  ****************************************
                    >781  
                    >782  *---------------------------------
                    >783  * Write text to the display device
                    >784  * The address of the text is on the stack
                    >785  * Positive numbers in message are RLE compressed number of spaces
                    >786  
E0CE07: 8C 47 C8    >787  WRITE6   STY   YBUFF      ;SAVE
E0CE0A: A0 00       >788           LDY   #0         
                    >789  WRITLOP6                  
E0CE0C: CD 00 C8    >790           CMP   $C800      ;disable DDT RAM
E0CE0F: B3 03       >791           LDA   (3,S),Y    ;get character to display
E0CE11: CD 00 CF    >792           CMP   $CF00      ;enable DDT RAM
E0CE14: C8          >793           INY              ;next character
E0CE15: C9 84       >794           CMP   #EOT       ;finished?
E0CE17: F0 11 =CE2A >795           BEQ   :DONE      ;if yes
E0CE19: 29 FF       >796           AND   #$FF       ;SET FLAGS
E0CE1B: 10 06 =CE23 >797           BPL   :SPACES    ;if coded spaces
                    >798  
E0CE1D: 20 C6 CF    >799           JSR   TRANSFR6   ;display character
E0CE20: 07          >800           DFB   COUTC      ;code
E0CE21: 80 E9 =CE0C >801           BRA   WRITLOP6   ;loop until done
                    >802  
E0CE23: AA          >803  :SPACES  TAX              
E0CE24: 20 C6 CF    >804           JSR   TRANSFR6   ;PRINT SPACES
E0CE27: 27          >805           DFB   PRBL2C     ;code
E0CE28: 80 E2 =CE0C >806           BRA   WRITLOP6   ;loop until done
                    >807  
E0CE2A:             >808  :DONE    MEMORY16         
E0CE2A: C2 20       >808           REP   #$20       
                    >808           <<<              
E0CE2C: 68          >809           PLA              ;get return address
E0CE2D: 83 01       >810           STA   1,S        ;free parameter space
E0CE2F:             >811           MEMORY8          
E0CE2F: E2 20       >811           SEP   #$20       
                    >811           <<<              
E0CE31: AC 47 C8    >812           LDY   YBUFF      ;RESTORE
E0CE34: 60          >813           RTS              
                    >814  
                    >815  *-------------------------------------------------
                    >816  * Pascal 1.1 interface routines
                    >817  * X & Y preserved
                    >818  
                    >819  * Initialize pascal slot
E0CE35: A9 0D       >820  INITPASC LDA   #$0D       ;low address byte of Pascal 1.1 init offset
E0CE37: 80 2B =CE64 >821           BRA   GOPASCAL   
                    >822  
                    >823  * Wait for and get next character
E0CE39: A9 0E       >824  INPASCAL LDA   #$0E       ;low address byte of Pascal 1.1 read offset
E0CE3B: 80 27 =CE64 >825           BRA   GOPASCAL   
                    >826  
                    >827  * Get port status
E0CE3D: EB          >828  STATPASC XBA              ;save request code
E0CE3E: A9 10       >829           LDA   #$10       ;low address byte of Pascal 1.1 status offset
E0CE40: 80 22 =CE64 >830           BRA   GOPASCAL   
                    >831  
                    >832  * Send a character out pascal slot
E0CE42: 48          >833  OUTPASCL PHA              ;save character
E0CE43: 29 7F       >834  :LFEED   AND   #$7F       ;STRIP PARITY
E0CE45: 48          >835           PHA              ;save char to write
E0CE46: A9 00       >836  :TXFULL  LDA   #$0        ;request code, 'are you ready for output?'
E0CE48: 20 3D CE    >837           JSR   STATPASC   ;get serial I/O status
E0CE4B: 90 F9 =CE46 >838           BCC   :TXFULL    
E0CE4D: 68          >839           PLA              ;char to write
E0CE4E: 48          >840           PHA              
E0CE4F: EB          >841           XBA              ;set Acc
E0CE50: A9 0F       >842           LDA   #$0F       ;low address byte of Pascal 1.1 write offset
E0CE52: 20 64 CE    >843           JSR   GOPASCAL   ;send character
E0CE55: 68          >844           PLA              ;character wrote
E0CE56: C9 0D       >845           CMP   #CR&$7F    ;CARRIAGE RETURN?
E0CE58: D0 08 =CE62 >846           BNE   :EXIT      ;NO
E0CE5A: 20 C6 CF    >847           JSR   TRANSFR6   ;DELAY FOR CR
E0CE5D: 7F          >848           DFB   WAITC      ;code
E0CE5E: A9 8A       >849           LDA   #LF        
E0CE60: 80 E1 =CE43 >850           BRA   :LFEED     ;DO LINE FEED
E0CE62: 68          >851  :EXIT    PLA              ;restore character
E0CE63: 60          >852           RTS              
                    >853  
                    >854  *-------------------------------------------------
                    >855  * Call the Pascal I/O interface routine. Must use TRANSFRx so we return
                    >856  * to proper segment.
                    >857  
E0CE64: DA          >858  GOPASCAL PHX              
E0CE65: 5A          >859           PHY              
E0CE66: 20 C6 CF    >860           JSR   TRANSFR6   ;go to pascal 1.1 routine
E0CE69: 25          >861           DFB   PASCALIOC  ;code
E0CE6A: 09 80       >862           ORA   #$80       ;strip parity if input
E0CE6C: 7A          >863           PLY              
E0CE6D: FA          >864           PLX              
E0CE6E: 60          >865           RTS              
                    >866  
                    >867  *-----------------------------------------------------
                    >868  * Swap the work stack area with the work stack buffer.
                    >869  * Place the stack in DDTSTACK.
                    >870  * Work stack must be in Main RAM.
                    >871  
E0CE6F: A2 28       >872  STKSWAP  LDX   #WSTKLGTH  ;LENGTH OF WORK STACK
                    >873  
E0CE71: BC 1D C9    >874  :WHILE   LDY   WSTKBUFF,X ;GET DATA FROM DDT RAM BUFFER
E0CE74: BF 28 01 00 >875           LDAL  WORKSTAK-WSTKLGTH,X ;GET DATA FROM WORK STACK
E0CE78: 9D 1D C9    >876           STA   WSTKBUFF,X ;PUT IN DDT RAM BUFFER
E0CE7B: 98          >877           TYA              
E0CE7C: 9F 28 01 00 >878           STAL  WORKSTAK-WSTKLGTH,X ;PUT IN STACK RAM
E0CE80: CA          >879           DEX              
E0CE81: D0 EE =CE71 >880           BNE   :WHILE     
E0CE83: 60          >881           RTS              
                    >882  
                    >883  *-------------------------------------------------
                    >884  * Display all windows & set to windDR if display is on
                    >885  
E0CE84: 2C 25 C8    >886  DISPON   BIT   OFFFLAG    ;IS DISPLAY OFF?
E0CE87: 30 1A =CEA3 >887           BMI   :ISOFF     ;IF YES SKIP DISPLAY
                    >888  
E0CE89: 4E 98 C8    >889           LSR   WINDFLG    ;indicate windows are on
E0CE8C: 20 C6 CF    >890           JSR   TRANSFR6   ;SET EXT DISPLAY SWITCHES
E0CE8F: 87          >891           DFB   SETSCRNC   ;code
E0CE90: 20 DB CD    >892           JSR   DSPBORDR   ;DISPLAY BORDERS
E0CE93: 20 C6 CF    >893           JSR   TRANSFR6   ;DISPLAY FLAG,MEM,EFF,STK WINDOWS
E0CE96: C7          >894           DFB   DISFMESC   ;code
E0CE97: 20 C6 CF    >895           JSR   TRANSFR6   ;DISPLAY BRK WINDOW
E0CE9A: B7          >896           DFB   DISBRKWC   ;code
E0CE9B: 20 C6 CF    >897           JSR   TRANSFR6   ;DISPLAY PROT WINDOW
E0CE9E: BF          >898           DFB   DISPROTWC  ;code
E0CE9F: 20 C6 CF    >899           JSR   TRANSFR6   ;set DR window
E0CEA2: A6          >900           DFB   WINDDRC    ;code
E0CEA3: 60          >901  :ISOFF   RTS              
                    >902           MX    %11        
                    >903  
                    >904  *-------------------------------------------------
                    >905  * INITIALIZE MEMLOW, MEMHI, Qreg & display registers
                    >906  
E0CEA4: AD 1F C8    >907  INITDISR LDA   PCLO       
E0CEA7: 8D 3D C8    >908           STA   MEMLOW      ;UPDATE THE MEMORY POINTER
E0CEAA: AD 20 C8    >909           LDA   PCHI       
E0CEAD: 8D 3E C8    >910           STA   MEMHI      
E0CEB0: AD 21 C8    >911           LDA   PBR         ;GET CURRENT BANK
E0CEB3: 8D 08 C9    >912           STA   MEMPBR     
E0CEB6: AD 36 C0    >913           LDA   SPEEDREG   
E0CEB9: 29 80       >914           AND   #$80       ;get speed bit
E0CEBB: 8D 1D C8    >915           STA   QREG       
E0CEBE: AD 35 C0    >916           LDA   SHADOW     
E0CEC1: 29 7F       >917           AND   #$7F       ;get shadow stuff
E0CEC3: 0C 1D C8    >918           TSB   QREG       ;update Qreg
                    >919  
                    >920  *-------------------------------------------------
                    >921  * Display the contents of the registers and disassemble the current
                    >922  * instruction. Returns with C=1 if at a breakpoint.
                    >923  
                    >924  * Note, got to do this the hard way so it works with printers,
                    >925  * dumb terms, etc.
                    >926  
E0CEC6: 20 C6 CF    >927           JSR   TRANSFR6   ;is the instruction our break
E0CEC9: 32          >928           DFB   VALIDPCC   ; code
E0CECA: 30 3A =CF06 >929           BMI   NOTBREAK   ;NOT OURS OR NOT BREAK
                    >930  * is break
E0CECC: 20 C6 CF    >931           JSR   TRANSFR6   ;DISPLAY "BREAKPOINT"
E0CECF: 05          >932           DFB   DISBREAKC  ; code
E0CED0: AC 47 C8    >933           LDY   YBUFF      ;RESTORE AFTER WRITE
E0CED3: 20 C6 CF    >934           JSR   TRANSFR6   ;PUT ORIG. INST BACK IN
E0CED6: 42          >935           DFB   REPLACEC   ; code
E0CED7: 8D 38 C8    >936           STA   SBTYPE      ;TYPE OF BRK REPLACED
E0CEDA: C9 C9       >937           CMP   #"I"        ;WAS IT IMPLIED BRK ?
E0CEDC: F0 03 =CEE1 >938           BEQ   :DISP       ;IF YES
E0CEDE: EE F7 C8    >939           INC   REALBRK     ;REAL BRK COUNTER
E0CEE1: 20 C6 CF    >940  :DISP    JSR   TRANSFR6   ;DISASSEMBLE AND DISPLAY
E0CEE4: 12          >941           DFB   DISREG2C   ; code
E0CEE5: AD 38 C8    >942           LDA   SBTYPE     
E0CEE8: C9 C9       >943           CMP   #"I"        ;WAS IT IMPLIED BRK ?
E0CEEA: F0 07 =CEF3 >944           BEQ   :INC        ;IF YES
E0CEEC: A9 00       >945           LDA   #0         
E0CEEE: A8          >946           TAY              
E0CEEF: 20 C6 CF    >947           JSR   TRANSFR6   ;PUT REAL BRK BACK IN
E0CEF2: 4A          >948           DFB   STAPCIYC   ; code
E0CEF3: EE F8 C8    >949  :INC     INC   POINT       ;POINT TO OLD BRK INFO
E0CEF6: AC 47 C8    >950           LDY   YBUFF       ;RESTORE Y
                    >951  
E0CEF9: 20 C6 CF    >952  UPDBRKW  JSR   TRANSFR6   ;UPDATE BRK WINDOW
E0CEFC: B7          >953           DFB   DISBRKWC   ;code
E0CEFD: 4E 99 C8    >954           LSR   BRKWFLG     ;CLEAR FLAG
                    >955  
E0CF00: 20 C6 CF    >956           JSR   TRANSFR6   ;SET DR WINDOW
E0CF03: A6          >957           DFB   WINDDRC    ; code
E0CF04: 38          >958           SEC              ;INDICATES A BRK
E0CF05: 60          >959           RTS              ;LEAVE
                    >960  
                    >961  * Not our break
E0CF06: 20 C6 CF    >962  NOTBREAK JSR   TRANSFR6   ; display registers
E0CF09: 12          >963           DFB   DISREG2C   ; code
                    >964  
                    >965  * Does the BRK window need updating ?
E0CF0A: 2C 99 C8    >966           BIT   BRKWFLG    
E0CF0D: 10 03 =CF12 >967           BPL   :NOBRK      ;IF NO
E0CF0F: 20 F9 CE    >968           JSR   UPDBRKW    ;IF YES
E0CF12: 18          >969  :NOBRK   CLC              ;NO BRK
E0CF13: 60          >970           RTS              ;RETURN
                    >971  
                    >972  *-------------------------------------------------
                    >973  * Display hardware breakpoint stuff
                    >974  
E0CF14: AD 43 C8    >975  DSPHBP   LDA   IERBUFF     ;GET IER BUFFER
E0CF17: 29 10       >976           AND   #%00010000 ;STRIP ALL BUT CB1 FLAG
E0CF19: F0 28 =CF43 >977           BEQ   HARDBOFF   ;DISABLED
                    >978  
                    >979  * Display X/ if HALT_ALL set.
E0CF1B: 2C 9B C8    >980           BIT   HALT_ALL   
E0CF1E: 10 08 =CF28 >981           BPL   :NO        
E0CF20: A9 D8       >982           LDA   #"X"       
E0CF22: 20 C6 CF    >983           JSR   TRANSFR6   
E0CF25: 07          >984           DFB   COUTC       ;code
E0CF26: 80 07 =CF2F >985           BRA   :SLASH     
                    >986  
E0CF28: AD 12 C9    >987  :NO      LDA   HARDPBR     ;BANK #
E0CF2B: 20 C6 CF    >988           JSR   TRANSFR6   
E0CF2E: 37          >989           DFB   PRBYTEC    
E0CF2F: A9 AF       >990  :SLASH   LDA   #"/"       
E0CF31: 20 C6 CF    >991           JSR   TRANSFR6   ;PRINT "/"
E0CF34: 07          >992           DFB   COUTC       ;code
E0CF35: AD 10 C8    >993           LDA   VIAORB     
E0CF38: 20 C6 CF    >994           JSR   TRANSFR6   ;PRINT HI BYTE OF ADDRESS
E0CF3B: 37          >995           DFB   PRBYTEC     ;CODE
E0CF3C: AD 01 C8    >996           LDA   VIAORA     
E0CF3F: 20 C6 CF    >997           JSR   TRANSFR6   ;PRINT LOW BYTE OF ADDRESS
E0CF42: 37          >998           DFB   PRBYTEC     ;CODE
                    >999  HARDBOFF                  
E0CF43: 60          >1000          RTS              
                    >1001 
                    >1002 *-------------------------------------------------
                    >1003 * Set window for DR
                    >1004 
E0CF44: A9 00       >1005 WINDDR   LDA   #0         
E0CF46: 8D FF C8    >1006          STA   WINDLEFT   
E0CF49: 8D 01 C9    >1007          STA   WINDTOP    
E0CF4C: 8D 03 C9    >1008          STA   CURSHORZ   ;LEFT EDGE OF WINDOW
E0CF4F: A9 29       >1009          LDA   #41        
E0CF51: 8D 00 C9    >1010          STA   WINDWDTH   
E0CF54: A9 18       >1011          LDA   #24        
E0CF56: 8D 02 C9    >1012          STA   WINDBTM    
E0CF59: A9 17       >1013          LDA   #23        
E0CF5B: 8D 04 C9    >1014          STA   CURSVERT   ;BOTTOM LINE
E0CF5E: 20 C6 CF    >1015          JSR   TRANSFR6   ;SET UP BASL BASH
E0CF61: 8F          >1016          DFB   VTABC       ;CODE
E0CF62: 60          >1017          RTS              
                    >1018 
                    >1019 
                    >1020 ***** THIS SEGMENTS GLOBAL SUBROUTINES *****
                    >1021 
                    >1022 SUBTABL6                  
                    >1023 
            =0106   >1024 LTABLE1C EQU   *-SUBTABL6*4+6+$100 
E0CF63: 1B CA       >1025          DA    LTABLE1-1  
                    >1026 
            =010E   >1027 TORDCHARC EQU  *-SUBTABL6*4+6+$100 
E0CF65: 25 CA       >1028          DA    TORDCHAR-1 
                    >1029 
            =0116   >1030 RESTSTUFC EQU  *-SUBTABL6*4+6+$100 
E0CF67: A6 CA       >1031          DA    RESTSTUF-1 
                    >1032 
            =011E   >1033 RESTTEXTC EQU  *-SUBTABL6*4+6+$100 
E0CF69: A3 CB       >1034          DA    RESTTEXT-1 
                    >1035 
            =0126   >1036 RESTDISPC EQU  *-SUBTABL6*4+6+$100 
E0CF6B: C4 CB       >1037          DA    RESTDISP-1 
                    >1038 
            =012E   >1039 ZPAGSAVEC EQU  *-SUBTABL6*4+6+$100 
E0CF6D: 07 CC       >1040          DA    ZPAGSAVE-1 
                    >1041 
            =0136   >1042 SAVEDISPC EQU  *-SUBTABL6*4+6+$100 
E0CF6F: 11 CC       >1043          DA    SAVEDISP-1 
                    >1044 
            =013E   >1045 INITRAMVC EQU  *-SUBTABL6*4+6+$100 
E0CF71: 3A CD       >1046          DA    INITRAMV-1 
                    >1047 
            =0146   >1048 SETMSTATC EQU  *-SUBTABL6*4+6+$100 
E0CF73: 46 CC       >1049          DA    SETMSTAT-1 
                    >1050 
            =014E   >1051 SETMPBRC EQU   *-SUBTABL6*4+6+$100 
E0CF75: 63 CC       >1052          DA    SETMPBR-1  
                    >1053 
            =0156   >1054 SETPBRC  EQU   *-SUBTABL6*4+6+$100 
E0CF77: 79 CC       >1055          DA    SETPBR-1   
                    >1056 
            =015E   >1057 INITPASCC EQU  *-SUBTABL6*4+6+$100 
E0CF79: 34 CE       >1058          DA    INITPASC-1 
                    >1059 
            =0166   >1060 INPASCALC EQU  *-SUBTABL6*4+6+$100 
E0CF7B: 38 CE       >1061          DA    INPASCAL-1 
                    >1062 
            =016E   >1063 STATPASCC EQU  *-SUBTABL6*4+6+$100 
E0CF7D: 3C CE       >1064          DA    STATPASC-1 
                    >1065 
            =0176   >1066 OUTPASCLC EQU  *-SUBTABL6*4+6+$100 
E0CF7F: 41 CE       >1067          DA    OUTPASCL-1 
                    >1068 
            =017E   >1069 WARMINITC EQU  *-SUBTABL6*4+6+$100 
E0CF81: B1 CD       >1070          DA    WARMINIT-1 
                    >1071 
            =0186   >1072 STKSWAPC EQU   *-SUBTABL6*4+6+$100 
E0CF83: 6E CE       >1073          DA    STKSWAP-1  
                    >1074 
            =018E   >1075 DISPONC  EQU   *-SUBTABL6*4+6+$100 
E0CF85: 83 CE       >1076          DA    DISPON-1   
                    >1077 
            =0196   >1078 INITDISRC EQU  *-SUBTABL6*4+6+$100 
E0CF87: A3 CE       >1079          DA    INITDISR-1 
                    >1080 
            =019E   >1081 DSPHBPC  EQU   *-SUBTABL6*4+6+$100 
E0CF89: 13 CF       >1082          DA    DSPHBP-1   
                    >1083 
            =01A6   >1084 WINDDRC  EQU   *-SUBTABL6*4+6+$100 
E0CF8B: 43 CF       >1085          DA    WINDDR-1   
                    >1086 
                    >1087 *****************************************
                    >1088 *  SEGMENT CROSSOVER AREA  *
                    >1089 *****************************************
                    >1090 
            =0004   >1092 S6END    =     $E0CF91-*  
                    >1093          do    nolist     
                    >1094          LST   OFF        
                    >1095          fin              
                    >1096          ERR   *-1/$E0CF91 
E0CF8D: FF FF FF FF >1097          DS    $E0CF91-*,$FF 
                    >1098 
                    >1099 
                    >1100 ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >1101 * Returns with MX = 11, saves registers
                    >1102 
                    >1103 SAVEAXP6                  
E0CF91: 08          >1104          PHP              ;SAVE STATUS
E0CF92:             >1105          MX16             
E0CF92: C2 30       >1105          REP   #$30       
                    >1105          <<<              
E0CF94: 8E 63 C8    >1106          STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >1107          STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >1108          STA   ASAVESEG   ;save 16 bits
E0CF9D:             >1109          MX8              
E0CF9D: E2 30       >1109          SEP   #$30       
                    >1109          <<<              
E0CF9F: 68          >1110          PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >1111          STA   PSAVESEG   ;SAVE
E0CFA3: 60          >1112          RTS              
                    >1113 
                    >1114 ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >1115 * restores registers
                    >1116 
                    >1117 RESTAXP6                  
E0CFA4:             >1118          MEMORY8          
E0CFA4: E2 20       >1118          SEP   #$20       
                    >1118          <<<              
E0CFA6: AD 67 C8    >1119          LDA   PSAVESEG   
E0CFA9: 48          >1120          PHA              
E0CFAA:             >1121          MX16             
E0CFAA: C2 30       >1121          REP   #$30       
                    >1121          <<<              
E0CFAC: AE 63 C8    >1122          LDX   XSAVESEG   
E0CFAF: AC 65 C8    >1123          LDY   YSAVESEG   
E0CFB2: AD 61 C8    >1124          LDA   ASAVESEG   
E0CFB5: 28          >1125          PLP              
E0CFB6: 60          >1126          RTS              
                    >1127          MX    %11        
                    >1128 
                    >1129 *----------------------------------------
                    >1130 * Do a direct transfer to other segments
                    >1131 
                    >1132 JUMPSEG6                  
E0CFB7: 20 91 CF    >1133          JSR   SAVEAXP6   
E0CFBA: AC 29 C8    >1134          LDY   SLOTN0     
E0CFBD: 68          >1135          PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >1136          PLA              ;get destination segment
E0CFBF: 99 88 C0    >1137          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1138          JSR   RESTAXP6   ;restore after xfer from other seg
E0CFC5: 60          >1139          RTS              ;pull destination address from stack
                    >1140 
                    >1141 * TRANSFER TO OTHER SEGMENTS
                    >1142 
                    >1143 TRANSFR6                  
                    >1144 
E0CFC6: 20 91 CF    >1145          JSR   SAVEAXP6   
E0CFC9:             >1146          MEMORY16         
E0CFC9: C2 20       >1146          REP   #$20       
                    >1146          <<<              
E0CFCB: 68          >1147          PLA              ;get return address from stack
E0CFCC: 1A          >1148          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1149          PHA              
E0CFCE:             >1150          MEMORY8          
E0CFCE: E2 20       >1150          SEP   #$20       
                    >1150          <<<              
E0CFD0: A9 06       >1151          LDA   #6         ;CURRENT SEG #
E0CFD2: 48          >1152          PHA              
E0CFD3: A0 00       >1153          LDY   #0         
E0CFD5: B3 02       >1154          LDA   (2,S),Y    ;GET CODE BYTE
E0CFD7: 48          >1155          PHA              ;SAVE CODE
E0CFD8: 29 07       >1156          AND   #$07       ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1157          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1158          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1159 * NEW SEGMENT
E0CFE0: 68          >1160          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1161          PEA   RETURN6    
E0CFE4: 29 F8       >1162          AND   #$F8       ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1163          LSR              
E0CFE7: 4A          >1164          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1165 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1166          TAY              
E0CFE9:             >1167          MEMORY16         
E0CFE9: C2 20       >1167          REP   #$20       
                    >1167          <<<              
E0CFEB: B9 63 CF    >1168          LDA   SUBTABL6,Y 
E0CFEE: 48          >1169          PHA              
E0CFEF: 80 B3 =CFA4 >1170          BRA   RESTAXP6   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1171          MX    %11        
                    >1172 
                    >1173 * RETURN HERE FROM SUBROUTINE
                    >1174 
            =E0CFF0 >1175 RETURN6  EQU   *-1        
E0CFF1: 20 91 CF    >1176          JSR   SAVEAXP6   
E0CFF4: 68          >1177          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1178          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1179          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1180          BRA   RESTAXP6   
                    >1181 
E0CFFD: FF FF FF    >1182          DS    \,$FF      ;PUT OBJECT AT NEXT PAG
                     47            PUT   SEG7       
                    >2    *********************************
                    >3    *           SEG7
                    >4    *********************************
                    >5    
                    >6    ]segnum  =     #$0700      ;current segment number
                    >7    
                    >8             ORG   $E0C800     ;CODE RUNS HERE
                    >9    
                    >10   * This space is shared with the VIA and the RAM.
                    >11   
                    >12   MSGSWSET                  
E0C800: ED EE E5 A0 >13   MSGMNE   ASC   "mne "84   
E0C805: E1 F5 F8 A0 >14   MSGAUX   ASC   "aux "84   
E0C80A: F2 EF ED A0 >15   MSGROM   ASC   "rom "84   
E0C80F: F2 E1 ED A0 >16   MSGRAM   ASC   "ram "84   
E0C814: A0 B1 A0 A0 >17   MSG1     ASC   " 1  "84   
E0C819: A0 B2 A0 A0 >18   MSG2     ASC   " 2  "84   
E0C81E: EF E6 E6 A0 >19   MSGOFF   ASC   "off "84   
E0C823: EF EE A0 A0 >20   MSGON    ASC   "on  "84   
E0C828: EF F5 F4 A0 >21   MSGOUT   ASC   "out "84   
E0C82D: E9 EE A0 A0 >22   MSGIN    ASC   "in  "84   
E0C832: B0 B2 A0 A0 >23   MSG02    ASC   "02  "84   
E0C837: C3 B0 B2 A0 >24   MSGC02   ASC   "C02 "84   
E0C83C: B8 B1 B6 A0 >25   MSG816   ASC   "816 "84   
E0C841: 8D 8D 8D A0 >26   MSGCR    DFB   CR,CR,CR," ",EOT 
                    >27   
                    >28   ****************************************
                    >29   * THIS POINT MUST BE $CA00 OR ABOVE.
                    >30   ****************************************
                    >31   
                    >32            ERR   *-1/$E0CA00 
E0C846: FF FF FF FF >33            DS    $E0CA00-*,$FF 
                    >34   
                    >35            MX    %11        
                    >36   
                    >37   ********************************
                    >38   *  I/O ROUTINES
                    >39   ********************************
                    >40   
            =E0CA00 >41   CROUTN   EQU   *          
E0CA00: A9 8D       >42   CROUT    LDA   #$8D        ;CARRIAGE RETURN
E0CA02: 20 6B CA    >43   COUT     JSR   SETRTS      ;SAVE STUFF IF NEEDED
E0CA05: 2C 24 C8    >44            BIT   IOMODE      ;CHECK I/O MODE
E0CA08: 70 57 =CA61 >45            BVS   SEND        ;OUTPUT TO SLOT1
E0CA0A: 30 55 =CA61 >46            BMI   SEND        ;SERIAL I/O
E0CA0C: 2C 25 C8    >47            BIT   OFFFLAG     ;DISPLAY ENABLED?
E0CA0F: 10 06 =CA17 >48            BPL   :DISP       ;IF YES
E0CA11: C9 87       >49            CMP   #$87        ;BELL ?
E0CA13: F0 02 =CA17 >50            BEQ   :DISP       ;IF YES RING EVEN IF DISPLAY OFF
E0CA15: 18          >51            CLC              ;clear "esc" flag
                    >52   * Display is off so don't display
E0CA16: 60          >53            RTS              
                    >54   
E0CA17: 4C 67 CB    >55   :DISP    JMP   TOCOUT     
                    >56   
E0CA1A: A9 A0       >57   SPACE    LDA   #$A0        ;SPACE
E0CA1C: D0 E4 =CA02 >58            BNE   COUT        ;<ALWAYS>
                    >59   
E0CA1E: A9 C5       >60   PRERR    LDA   #"E"       
E0CA20: 20 02 CA    >61            JSR   COUT       
E0CA23: A9 D2       >62            LDA   #"R"       
E0CA25: 20 02 CA    >63            JSR   COUT       
E0CA28: 20 02 CA    >64            JSR   COUT       
                    >65   
E0CA2B: A9 87       >66   BELL     LDA   #$87        ;BELL CHAR
E0CA2D: D0 D3 =CA02 >67            BNE   COUT       
                    >68   
E0CA2F: 2C 24 C8    >69   RDCHAR   BIT   IOMODE      ;SERIAL I/O?
E0CA32: 30 32 =CA66 >70            BMI   RECEIVE     ;IF YES
E0CA34: 20 6B CA    >71            JSR   SETRTS      ;INIT DISPLAY FOR EXTII OUTPUT
E0CA37: 20 C6 CF    >72   :OFF     JSR   TRANSFR7   ;READ CHARACTER
E0CA3A: 0E          >73            DFB   TORDCHARC  ;code
E0CA3B: 60          >74            RTS              
                    >75   
E0CA3C: 20 40 CA    >76   PRNTAX   JSR   PRBYTE     
E0CA3F: 8A          >77            TXA              
                    >78   
E0CA40: 48          >79   PRBYTE   PHA              
E0CA41: 4A          >80            LSR              
E0CA42: 4A          >81            LSR              
E0CA43: 4A          >82            LSR              
E0CA44: 4A          >83            LSR              
E0CA45: 20 4B CA    >84            JSR   PRHEX      
E0CA48: 68          >85            PLA              
E0CA49: 29 0F       >86            AND   #$0F       
E0CA4B: 09 B0       >87   PRHEX    ORA   #$B0       
E0CA4D: C9 BA       >88            CMP   #$BA       
E0CA4F: 90 B1 =CA02 >89            BCC   COUT       
E0CA51: 69 06       >90            ADC   #$06       
E0CA53: 4C 02 CA    >91            JMP   COUT       
                    >92   
E0CA56: A2 03       >93   PRBLNK   LDX   #3         
                    >94   
E0CA58: A9 A0       >95   PRBL2    LDA   #$A0       
E0CA5A: 20 02 CA    >96   XSPACES  JSR   COUT       
E0CA5D: CA          >97            DEX              
E0CA5E: D0 FA =CA5A >98            BNE   XSPACES    
E0CA60: 60          >99            RTS              
                    >100  
                    >101  *-------------------------------------------------
                    >102  * Slot I/O routines via Pascal 1.1 device
                    >103  
E0CA61: 20 C6 CF    >104  SEND     JSR   TRANSFR7   ;OUTPUT TO slot 1 or 2
E0CA64: 76          >105           DFB   OUTPASCLC  ;code
E0CA65: 60          >106           RTS              
                    >107  
E0CA66: 20 C6 CF    >108  RECEIVE  JSR   TRANSFR7   ;INPUT FROM slot 1 or 2
E0CA69: 66          >109           DFB   INPASCALC  ;code
E0CA6A: 60          >110           RTS              
                    >111  
                    >112  **************************************************
                    >113  * Turn on the flag indicating the screen RAM has been changed by DDT.
                    >114  
E0CA6B: 48          >115  SETRTS   PHA              ;SAVE ACC
E0CA6C: DA          >116           PHX              ;SAVE X
E0CA6D: 5A          >117           PHY              ;SAVE Y
E0CA6E: 2C 76 C8    >118           BIT   INITFLAG   ;HAS THE USER PROGRAM BEEN EXECUTED?
E0CA71: 10 0C =CA7F >119           BPL   :ZPOK      ;IF NO
E0CA73: 20 C6 CF    >120           JSR   TRANSFR7   ;SAVE SCREEN SWITCHES, TXT RAM IF INVIS
E0CA76: 2E          >121           DFB   ZPAGSAVEC  ;code
E0CA77: 2C 25 C8    >122           BIT   OFFFLAG    ;DISPLAY OFF ?
E0CA7A: 30 08 =CA84 >123           BMI   :NOSCRN    ;IF YES
                    >124  
E0CA7C: 20 79 CC    >125           JSR   SETSCRN     ;SET THE DISPLAY SWITCHES FOR EXT2 OUTPUT
                    >126  
E0CA7F: A9 FF       >127  :ZPOK    LDA   #$FF        ;SET THIS FLAG TO INDICATE THAT
E0CA81: 8D B1 C9    >128           STA   RESTFLAG   ; SCREEN RAM AREA HAS BEEN DISTURBED
                    >129  
E0CA84: 7A          >130  :NOSCRN  PLY              
E0CA85: FA          >131           PLX              
E0CA86: 68          >132           PLA              
E0CA87: 60          >133           RTS              
                    >134  
                    >135  *-------------------------------------------------
                    >136  * Must use this routine to avoid messing up the input buffer in Apple memory.
                    >137  * Get line subroutine
                    >138  
            =E0CA88 >139  NOTCR    EQU   *          
E0CA88: BD 63 C9    >140           LDA   IN,X       
E0CA8B: 20 22 CB    >141           JSR   DOCOUT     
E0CA8E: C9 88       >142           CMP   #LTARROW   ;IS IT LEFT ARROW
E0CA90: F0 25 =CAB7 >143           BEQ   BCKSPC     
E0CA92: C9 98       >144           CMP   #CTRLX      ;IS IT CTRL X
E0CA94: F0 0C =CAA2 >145           BEQ   GETLNZ      ;IF YES
E0CA96: E0 19       >146           CPX   #25         ;RING BELL AFTER 25 CHARACTERS, AS WARNING.
E0CA98: 90 03 =CA9D >147           BLT   NOTCR1     
E0CA9A: 20 2B CA    >148  GETERR   JSR   BELL       
E0CA9D: E8          >149  NOTCR1   INX              
E0CA9E: E0 1E       >150           CPX   #30         ;LIMIT INPUT LINE TO 30 CHARACTERS
E0CAA0: D0 19 =CABB >151           BNE   NXTCHAR    
                    >152  
E0CAA2: 20 00 CA    >153  GETLNZ   JSR   CROUT      
E0CAA5: AD 92 C8    >154  GETLN    LDA   TFLAG       ;TRACE MODE ?
E0CAA8: F0 05 =CAAF >155           BEQ   GETNOT      ;IF NO
E0CAAA: A9 D4       >156           LDA   #"T"        ;INDICATE TRACE MODE
E0CAAC: 20 02 CA    >157           JSR   COUT       
E0CAAF: AD FA C8    >158  GETNOT   LDA   PROMPT     
E0CAB2: 20 02 CA    >159           JSR   COUT       
E0CAB5: A2 01       >160           LDX   #$01       
E0CAB7: 8A          >161  BCKSPC   TXA              
E0CAB8: F0 F5 =CAAF >162           BEQ   GETNOT     
E0CABA: CA          >163           DEX              
E0CABB: 20 2F CA    >164  NXTCHAR  JSR   RDCHAR     
E0CABE: C9 8B       >165  GETLNNO  CMP   #UPARROW   ;UP ARROW ?
E0CAC0: F0 F9 =CABB >166           BEQ   NXTCHAR     ;IF YES IGNORE
E0CAC2: C9 9B       >167           CMP   #ESC        ;esc key?
E0CAC4: D0 01 =CAC7 >168           BNE   :CKRAROW   ;if no
E0CAC6: 60          >169           RTS              ;returns with Carry set if ESC key
                    >170  
E0CAC7: C9 95       >171  :CKRAROW CMP   #RTARROW   ;RIGHT ARROW ?
E0CAC9: D0 18 =CAE3 >172           BNE   :DELTST     ;IF NO
E0CACB: AC 06 C9    >173           LDY   MEMHORZ     ;SCREEN MEM POINTER
                    >174  
                    >175  * Odd or even column
E0CACE: AD 03 C9    >176           LDA   CURSHORZ   ;COLUMN NUMBER
E0CAD1: 4A          >177           LSR              ;SET CARRY IF ODD
E0CAD2: B0 0D =CAE1 >178           BCS   :AROWMAIN  ;ODD COLUMN IS MAIN MEM.
E0CAD4: 08          >179           PHP              
E0CAD5: 78          >180           SEI              
E0CAD6: 8D 55 C0    >181           STA   TXTPAGE2   ;AUX ON
E0CAD9: B1 28       >182           LDA   (BASL),Y   ;GET CHAR
E0CADB: 8D 54 C0    >183           STA   TXTPAGE1   ;MAIN ON
E0CADE: 28          >184           PLP              
E0CADF: 90 02 =CAE3 >185           BCC   :DELTST     ;<ALWAYS>
                    >186  :AROWMAIN                 
E0CAE1: B1 28       >187           LDA   (BASL),Y   
E0CAE3: C9 FF       >188  :DELTST  CMP   #DELETE    
E0CAE5: D0 02 =CAE9 >189           BNE   :CHKDAROW  
E0CAE7: A9 88       >190           LDA   #LTARROW   ;IF YES MAKE IT LEFT ARROW
                    >191  :CHKDAROW                 
E0CAE9: C9 8A       >192           CMP   #DNARROW   ;DOWN ARROW ?
E0CAEB: D0 0D =CAFA >193           BNE   :CAPTST     ;IF NO
                    >194  * It is down arrow, if tracing skip next instruction
E0CAED: 2C 92 C8    >195           BIT   TFLAG       ;TRACING ?
E0CAF0: F0 18 =CB0A >196           BEQ   :MAKECR     ;NOT TRACING
E0CAF2: A9 BE       >197           LDA   #">"        ;MAKE ">"
E0CAF4: 9D 63 C9    >198           STA   IN,X        ;PUT IN BUFFER
E0CAF7: E8          >199           INX              
E0CAF8: D0 10 =CB0A >200           BNE   :MAKECR     ;FOLLOW WITH <CR>
                    >201  
E0CAFA: C9 E0       >202  :CAPTST  CMP   #$E0       
E0CAFC: 90 02 =CB00 >203           BLT   :ADDINP    
E0CAFE: 29 DF       >204           AND   #$DF        ;SHIFT TO UPPER CASE
E0CB00: 9D 63 C9    >205  :ADDINP  STA   IN,X        ;STORE CHAR IN BUFFER
E0CB03: C9 8D       >206           CMP   #CR         ;IS IT CARRIAGE RETURN
E0CB05: F0 03 =CB0A >207           BEQ   :MAKECR     ;IF YES
E0CB07: 4C 88 CA    >208           JMP   NOTCR       ;IF NO
                    >209  :MAKECR                   
E0CB0A: AD 92 C8    >210           LDA   TFLAG      ; TRACE MODE ?
E0CB0D: F0 10 =CB1F >211           BEQ   :DoCRLF    ; IF NO
E0CB0F: E0 00       >212           cpx   #0         ; was "Return" the only key?
E0CB11: D0 0C =CB1F >213           bne   :DoCRLF    ; if no
E0CB13: A9 8E       >214           lda   #$8E       ; $8E is special code, CR w/no linefeed
E0CB15: 2C 24 C8    >215           BIT   IOMODE     ; .. use regular CR if in a serial mode
E0CB18: 70 05 =CB1F >216           BVS   :DoCRLF    ; OUTPUT TO SLOT1?
E0CB1A: 30 03 =CB1F >217           BMI   :DoCRLF    ; SERIAL I/O?
E0CB1C: 4C 02 CA    >218           jmp   cout       ; do special return
E0CB1F: 4C 00 CA    >219  :DoCRLF  JMP   CROUT      ; SEND $8D AND RETURN
                    >220  
                    >221  * Makes reaching right edge of window look like <CR>
                    >222  
E0CB22: 20 02 CA    >223  DOCOUT   JSR   COUT        ;OUTPUT
E0CB25: AC 03 C9    >224           LDY   CURSHORZ   
E0CB28: C8          >225           INY              
E0CB29: CC 00 C9    >226           CPY   WINDWDTH   ;END OF DATA AREA
E0CB2C: 90 06 =CB34 >227           BLT   :OK         ;IF NO, RETURN TO GETLN
E0CB2E: 68          >228           PLA              
E0CB2F: 68          >229           PLA              ;RETURN TO CALLER OF GETLN
E0CB30: E8          >230           INX              ;INCLUDE LAST CHAR
E0CB31: 4C 00 CA    >231           JMP   CROUT      
E0CB34: 60          >232  :OK      RTS              
                    >233  
E0CB35: C9 87       >234  BELLONE  CMP   #$87        ;CTRL-G?
E0CB37: D0 0D =CB46 >235           BNE   BELLRTS    
E0CB39: A0 A0       >236           LDY   #$A0       
E0CB3B: A9 0F       >237  BELLTWO  LDA   #$0F       
E0CB3D: 20 64 CC    >238           JSR   WAIT       
E0CB40: AD 30 C0    >239           LDA   SPKR       
E0CB43: 88          >240           DEY              
E0CB44: D0 F5 =CB3B >241           BNE   BELLTWO    
E0CB46: 60          >242  BELLRTS  RTS              
                    >243  
E0CB47: AC 03 C9    >244  OUTPUT   LDY   CURSHORZ   
E0CB4A: 48          >245           PHA              ;SAVE ACC
E0CB4B: 98          >246           TYA              
E0CB4C: 4A          >247           LSR              ;DIVIDE BY 2
E0CB4D: 8D 06 C9    >248           STA   MEMHORZ     ;SCREEN MEMORY POINTER
E0CB50: A8          >249           TAY              
E0CB51: 68          >250           PLA              ;RESTORE ACC. (CARRY NOT AFFECTED)
E0CB52: B0 05 =CB59 >251           BCS   OUTMAIN     ;MAIN MEMORY
E0CB54: 20 70 CC    >252           JSR   WRITEAUX   ;WRITE ACC. TO AUX MEM.
E0CB57: 90 02 =CB5B >253           BCC   INCCH       ;<ALWAYS>
E0CB59: 91 28       >254  OUTMAIN  STA   (BASL),Y   
E0CB5B: EE 03 C9    >255  INCCH    INC   CURSHORZ   
E0CB5E: AD 03 C9    >256           LDA   CURSHORZ   
E0CB61: CD 00 C9    >257           CMP   WINDWDTH   
E0CB64: B0 2F =CB95 >258           BCS   RETURN     
E0CB66: 60          >259           RTS              
                    >260  
                    >261  **************************************************
                    >262  * Output a character to the screen window.
                    >263  * If the right side of the window is reached, then scroll all lines in
                    >264  * the window up 1 and position the cursor at bottom left.
                    >265  * Windows must have an even number for the left edge.
                    >266  * $8E is a special code, do a CR w/no linefeed
                    >267  
E0CB67: 5A          >268  TOCOUT   PHY              
E0CB68: 48          >269           PHA              
E0CB69: 20 70 CB    >270           JSR   VIDOUT     
E0CB6C: 68          >271           PLA              
E0CB6D: 7A          >272           PLY              
E0CB6E: 18          >273           CLC              ;clear "esc" flag
E0CB6F: 60          >274           RTS              
                    >275  
E0CB70: C9 A0       >276  VIDOUT   CMP   #$A0        ;CONTROL CHAR?
E0CB72: B0 D3 =CB47 >277           BGE   OUTPUT      ;IF NO
E0CB74: A8          >278           TAY              ;POSOTIVE #?
E0CB75: 10 D0 =CB47 >279           BPL   OUTPUT      ;IF YES
E0CB77: C9 8A       >280           CMP   #$8A        ;LINE FEED?
E0CB79: F0 1D =CB98 >281           BEQ   LINEFEED   ;IF YES
E0CB7B: C9 8D       >282           CMP   #$8D        ;CR?
E0CB7D: F0 16 =CB95 >283           BEQ   RETURN      ;IF YES
E0CB7F: C9 8E       >284           cmp   #$8E       ; special CR?
E0CB81: D0 05 =CB88 >285           bne   :chkLarw   ; if no
E0CB83: CE 04 C9    >286           dec   CursVert   ; prevent line feed
E0CB86: 80 0D =CB95 >287           bra   RETURN     
                    >288  
E0CB88: C9 88       >289  :chkLarw CMP   #$88        ;LEFT ARROW?
E0CB8A: D0 A9 =CB35 >290           BNE   BELLONE     ;IF NO CHECK FOR BELL
E0CB8C: CE 03 C9    >291  BACKSPAC DEC   CURSHORZ   ;DECRMENT CURSOR HORIZ POSITION
E0CB8F: 10 03 =CB94 >292           BPL   LEFTRTS     ;POS IF NOT PAST LEFT EDGE
E0CB91: EE 03 C9    >293           INC   CURSHORZ   ;PUT BACK TO 0 AT LEFT EDGE OF WINDOW
E0CB94: 60          >294  LEFTRTS  RTS              
                    >295  
E0CB95: 9C 03 C9    >296  RETURN   STZ   CURSHORZ   ;PUT CURSOR TO LEFT EDGE OF WINDOW
                    >297  
E0CB98: EE 04 C9    >298  LINEFEED INC   CURSVERT   ;CURSOR DOWN 1 LINE
E0CB9B: AD 04 C9    >299           LDA   CURSVERT   
E0CB9E: CD 02 C9    >300           CMP   WINDBTM     ;CHECK FOR WINDOW BOTTOM?
E0CBA1: 90 46 =CBE9 >301           BCC   SETBASE     ;NO, SET NEW BASE ADDRESS
E0CBA3: CE 04 C9    >302           DEC   CURSVERT   ;OFF BOTTOM, SO PUT BACK TO BOTTOM
E0CBA6: AD 01 C9    >303  SCROLL   LDA   WINDTOP     ;START AT TOP
E0CBA9: 48          >304           PHA              
E0CBAA: 20 E9 CB    >305           JSR   SETBASE     ;CALC BASE ADDRESS
E0CBAD: 8E 49 C8    >306           STX   XBUFF       ;SAVE X
E0CBB0: A5 28       >307  SCROLL1  LDA   BASL        ;COPY BASL,X
E0CBB2: 85 2A       >308           STA   BAS2L       ;TO BAS2L,H
E0CBB4: A5 29       >309           LDA   BASH       
E0CBB6: 85 2B       >310           STA   BAS2H      
E0CBB8: AE 00 C9    >311           LDX   WINDWDTH   ;INIT X TO RIGHTMOST INDEX
E0CBBB: CA          >312           DEX              ;PUT IN 0-79 TERMS
E0CBBC: 68          >313           PLA              
E0CBBD: 69 01       >314           ADC   #$01        ;INCR LINE NUMBER
E0CBBF: CD 02 C9    >315           CMP   WINDBTM     ;DONE?
E0CBC2: B0 1A =CBDE >316           BCS   SCROLL3     ;YES
E0CBC4: 48          >317           PHA              
E0CBC5: 20 E9 CB    >318           JSR   SETBASE     ;CALC BASL,A
E0CBC8: 8A          >319  SCROLL2  TXA              
E0CBC9: 4A          >320           LSR              ;DIVIDE BY 2
E0CBCA: A8          >321           TAY              
E0CBCB: B0 03 =CBD0 >322           BCS   SCRLMAIN   ;MAIN MEMORY
E0CBCD: AD 55 C0    >323           LDA   TXTPAGE2   ;AUX MEM ON
E0CBD0: B1 28       >324  SCRLMAIN LDA   (BASL),Y   
E0CBD2: 91 2A       >325           STA   (BAS2L),Y  
E0CBD4: B0 03 =CBD9 >326           BCS   :SPEED      ;THIS IS FASTER
E0CBD6: AD 54 C0    >327           LDA   TXTPAGE1   ;MAIN MEM
E0CBD9: CA          >328  :SPEED   DEX              ;SHIFT LEFT ONE CHAR
E0CBDA: 10 EC =CBC8 >329           BPL   SCROLL2    
E0CBDC: 30 D2 =CBB0 >330           BMI   SCROLL1    
E0CBDE: AE 49 C8    >331  SCROLL3  LDX   XBUFF       ;RESTORE X
E0CBE1: A0 00       >332           LDY   #$0         ;CLEAR BOTTOM LINE
E0CBE3: 20 1A CC    >333           JSR   CLEOLZ     
                    >334  
E0CBE6: AD 04 C9    >335  VTAB     LDA   CURSVERT   
E0CBE9: 2C 24 C8    >336  SETBASE  BIT   IOMODE      ;DON'T CHANGE BASL,H IF NOT SCREEN I/O
E0CBEC: 30 27 =CC15 >337           BMI   :SKIP       ;IF SERIAL I/O
E0CBEE: 70 25 =CC15 >338           BVS   :SKIP       ;IF SLOT 1 I/O
E0CBF0: 2C 25 C8    >339           BIT   OFFFLAG     ;DISPLAY OFF ?
E0CBF3: 30 20 =CC15 >340           BMI   :SKIP       ;IF YES
                    >341  
                    >342  * Calc base address in BASL,H
E0CBF5: 48          >343           PHA              ;CALC BASE ADR IN BASL,H
E0CBF6: 4A          >344           LSR              ;FOR GIVEN LINE NUMBER
E0CBF7: 29 03       >345           AND   #$03        ;0<=LINE NO.<=$17
E0CBF9: 09 04       >346           ORA   #$04       
E0CBFB: 85 29       >347           STA   BASH       
E0CBFD: 68          >348           PLA              
E0CBFE: 29 18       >349           AND   #$18       
E0CC00: 90 02 =CC04 >350           BCC   :BSCLC2    
E0CC02: 69 7F       >351           ADC   #$7F       
E0CC04: 85 28       >352  :BSCLC2  STA   BASL       
E0CC06: 0A          >353           ASL              
E0CC07: 0A          >354           ASL              
E0CC08: 05 28       >355           ORA   BASL       
E0CC0A: 85 28       >356           STA   BASL       
                    >357  
E0CC0C: AD FF C8    >358           LDA   WINDLEFT   
E0CC0F: 4A          >359           LSR              ;DIVIDE BY 2
E0CC10: 18          >360           CLC              
E0CC11: 65 28       >361           ADC   BASL       
E0CC13: 85 28       >362           STA   BASL       
E0CC15: 18          >363  :SKIP    CLC              ;clear "esc" flag
E0CC16: 60          >364           RTS              
                    >365  
E0CC17: AC 03 C9    >366  CLREOL   LDY   CURSHORZ   
E0CC1A: 8C 06 C9    >367  CLEOLZ   STY   MEMHORZ    
                    >368  
                    >369  * Don't clear if not screen I/O
E0CC1D: AD 24 C8    >370           LDA   IOMODE     
E0CC20: D0 1C =CC3E >371           BNE   :NOCLR     
                    >372  
E0CC22: AC 06 C9    >373  :CLEOL2  LDY   MEMHORZ    
E0CC25: 98          >374           TYA              
E0CC26: 4A          >375           LSR              ;DIVIDE BY 2, CARRY SET IF ODD COLUMN
E0CC27: A8          >376           TAY              
E0CC28: A9 A0       >377           LDA   #$A0       
E0CC2A: B0 05 =CC31 >378           BCS   :CLEAR40   ;DON'T CLEAR 1ST EVEN COL IF SETTING ON ODD
E0CC2C: 20 70 CC    >379           JSR   WRITEAUX   ;WRITE TO SCREEN
E0CC2F: 90 02 =CC33 >380           BCC   :CLRCHK     ;<ALWAYS>
E0CC31: 91 28       >381  :CLEAR40 STA   (BASL),Y   ;WRITE SPACE
E0CC33: EE 06 C9    >382  :CLRCHK  INC   MEMHORZ    
E0CC36: AD 06 C9    >383           LDA   MEMHORZ    
E0CC39: CD 00 C9    >384           CMP   WINDWDTH   ;END OF THE LINE?
E0CC3C: 90 E4 =CC22 >385           BLT   :CLEOL2     ;IF NO
E0CC3E: 60          >386  :NOCLR   RTS              
                    >387  
                    >388  *-------------------------------------------------
                    >389  * Clear and home within window
                    >390  
E0CC3F: AC 01 C9    >391  CLRHOME  LDY   WINDTOP     ;START AT TOP
E0CC42: 8C 04 C9    >392           STY   CURSVERT   
E0CC45: 20 E6 CB    >393  CLRBOT   JSR   VTAB        ;INIT BASL & BASH
E0CC48: A0 00       >394           LDY   #0         
E0CC4A: 20 1A CC    >395           JSR   CLEOLZ      ;CLEAR LINE
E0CC4D: EE 04 C9    >396           INC   CURSVERT   ;NEXT LINE
E0CC50: AD 04 C9    >397           LDA   CURSVERT   
E0CC53: CD 02 C9    >398           CMP   WINDBTM     ;BOTTOM?
E0CC56: 90 ED =CC45 >399           BLT   CLRBOT      ;IF NO
                    >400  
                    >401  *-------------------------------------------------
                    >402  * Home without clear
                    >403  
E0CC58: 9C 03 C9    >404  HOME     STZ   CURSHORZ   ;LEFT EDGE
E0CC5B: AC 01 C9    >405           LDY   WINDTOP     ;FINISHED 
E0CC5E: 8C 04 C9    >406           STY   CURSVERT   
E0CC61: 4C E6 CB    >407           JMP   VTAB       
                    >408  
                    >409  ***** WAIT *****
                    >410  
E0CC64: 38          >411  WAIT     SEC              
E0CC65: 48          >412  WAIT2    PHA              
E0CC66: E9 01       >413  WAIT3    SBC   #$01       
E0CC68: D0 FC =CC66 >414           BNE   WAIT3      
E0CC6A: 68          >415           PLA              
E0CC6B: E9 01       >416           SBC   #$01       
E0CC6D: D0 F6 =CC65 >417           BNE   WAIT2      
E0CC6F: 60          >418           RTS              
                    >419  
                    >420  **************************************************
                    >421  * Subroutines used above
                    >422  
                    >423  * Write the contents of the ACC to aux screen memory
                    >424  
E0CC70: 8D 55 C0    >425  WRITEAUX STA   TXTPAGE2   ;AUX ON
E0CC73: 91 28       >426           STA   (BASL),Y   ;PUT ON SCREEN
E0CC75: 8D 54 C0    >427           STA   TXTPAGE1   ;MAIN ON
E0CC78: 60          >428           RTS              
                    >429  
                    >430  * Set the screen switches for output by the DDT.
                    >431  
E0CC79: A9 80       >432  SETSCRN  LDA   #$80       
E0CC7B: 1C 29 C0    >433           TRB   SUPERHR     ;Turn off Super Hi-Res
E0CC7E: A9 00       >434           LDA   #0         
E0CC80: 8D 76 C8    >435           STA   INITFLAG   ;<TEMPORARY HERE> SHOW THAT APPLE SETUP SAVED
E0CC83: 8D 51 C0    >436           STA   TEXTON      ;TEXT MODE
E0CC86: 8D 52 C0    >437           STA   MIXEDOFF   ;ALL TEXT
E0CC89: 8D 0D C0    >438           STA   COL80ON     ;80 COL DISP. ON
E0CC8C: 8D 01 C0    >439           STA   STR80ON     ;ALLOW TXTPAGE1 TO SWITCH MAIN/AUX
E0CC8F: 8D 54 C0    >440           STA   TXTPAGE1   ;PAGE1 OR MAIN MEM
E0CC92: 4C E6 CB    >441           JMP   VTAB        ;INIT BASL TO LAST ACTIVE EXT WINDOW
                    >442  
                    >443  *-------------------------------------------------
                    >444  * Display the flag window
                    >445  
E0CC95: 00 00 00 0A >446  FLGMOFF  HEX   00,00,00,0A,14,1E,1E,1E 
                    >447  
E0CC9D: 02 01 04 10 >448  ANDDSFL  HEX   02,01,04,10,20 
                    >449  
E0CCA2: AD 24 C8    >450  DISFLGW  LDA   IOMODE      ;DON'T DISPLAY IF NOT SCREEN I/O
E0CCA5: F0 01 =CCA8 >451           BEQ   :NOTSER     ;IF SCREEN I/O
E0CCA7: 60          >452           RTS              
                    >453  
                    >454  * Set window limits, start at 2nd line down
                    >455  
E0CCA8: A9 01       >456  :NOTSER  LDA   #1         
E0CCAA: 8D 01 C9    >457           STA   WINDTOP    
E0CCAD: A9 2A       >458           LDA   #42        
E0CCAF: 8D FF C8    >459           STA   WINDLEFT   
E0CCB2: A9 26       >460           LDA   #38        
E0CCB4: 8D 00 C9    >461           STA   WINDWDTH   
E0CCB7: A9 05       >462           LDA   #5         
E0CCB9: 8D 02 C9    >463           STA   WINDBTM    
E0CCBC: 20 58 CC    >464           JSR   HOME       
                    >465  
                    >466  * Display 1st row of flags
                    >467  
E0CCBF: A2 05       >468           LDX   #5         
E0CCC1: 20 58 CA    >469           JSR   PRBL2       ;5 SPACES
E0CCC4: AD 1C C8    >470           LDA   MSTATE      ;MACHINE STATE
E0CCC7: 48          >471           PHA              
E0CCC8: A2 00       >472           LDX   #0         
E0CCCA: BC 95 CC    >473  :NEXT    LDY   FLGMOFF,X  
E0CCCD: 68          >474           PLA              
E0CCCE: 2A          >475           ROL              
E0CCCF: 48          >476           PHA              
E0CCD0: 20 28 CD    >477           JSR   FLAGDISP   
E0CCD3: E8          >478           INX              
E0CCD4: E0 08       >479           CPX   #8         
E0CCD6: D0 F2 =CCCA >480           BNE   :NEXT      
E0CCD8: 68          >481           PLA              
E0CCD9: A0 41       >482           LDY   #MSGCR-MSGSWSET 
E0CCDB: 20 2F CD    >483           JSR   BIT0       
                    >484  
                    >485  * Display 2nd row of flags
                    >486  
E0CCDE: AD BA C9    >487           LDA   KEY         ;COMMAND PREFIX KEY
E0CCE1: 20 40 CA    >488           JSR   PRBYTE      ;DISPLAY AS HEX
E0CCE4: A2 02       >489           LDX   #2         
E0CCE6: 20 58 CA    >490           JSR   PRBL2       ;2 SPACES
E0CCE9: A0 28       >491           LDY   #MSGOUT-MSGSWSET 
E0CCEB: 38          >492           SEC              
E0CCEC: AD F7 C8    >493           LDA   REALBRK     ;0=NO REAL BRKS
E0CCEF: D0 01 =CCF2 >494           BNE   :BRK        ;IF REAL BRKS
E0CCF1: 18          >495           CLC              
E0CCF2: 20 28 CD    >496  :BRK     JSR   FLAGDISP   
E0CCF5: A0 32       >497           LDY   #MSG02-MSGSWSET 
E0CCF7: 18          >498           CLC              
E0CCF8: AD 23 C8    >499           LDA   CMOSFLAG   ;TYPE 02, C02, OR 816
E0CCFB: F0 06 =CD03 >500           BEQ   :TYP        ;02
E0CCFD: 38          >501           SEC              
E0CCFE: 30 03 =CD03 >502           BMI   :TYP        ;C02
E0CD00: 18          >503           CLC              
E0CD01: A0 3C       >504           LDY   #MSG816-MSGSWSET ;816
E0CD03: 20 28 CD    >505  :TYP     JSR   FLAGDISP   
E0CD06: A0 1E       >506           LDY   #MSGOFF-MSGSWSET 
E0CD08: 8C 47 C8    >507           STY   YBUFF      
E0CD0B: 18          >508           CLC              
E0CD0C: AD 22 C8    >509           LDA   INVISIBL   ;INVIS MODE FLAG
E0CD0F: 10 01 =CD12 >510           BPL   :INV        ;IF OFF
E0CD11: 38          >511           SEC              
E0CD12: 20 28 CD    >512  :INV     JSR   FLAGDISP   
E0CD15: A2 04       >513           LDX   #4         
E0CD17: 18          >514  :NEXTDF  CLC              
E0CD18: AD A7 C8    >515           LDA   DISPFLAG   
E0CD1B: 3D 9D CC    >516           AND   ANDDSFL,X  ;TEST PROPER BIT
E0CD1E: F0 01 =CD21 >517           BEQ   :NOTSET    
E0CD20: 38          >518           SEC              
E0CD21: 20 28 CD    >519  :NOTSET  JSR   FLAGDISP   
E0CD24: CA          >520           DEX              
E0CD25: 10 F0 =CD17 >521           BPL   :NEXTDF    
E0CD27: 60          >522           RTS              
                    >523  
E0CD28: 90 05 =CD2F >524  FLAGDISP BCC   BIT0       
E0CD2A: C8          >525           INY              
E0CD2B: C8          >526           INY              
E0CD2C: C8          >527           INY              
E0CD2D: C8          >528           INY              
E0CD2E: C8          >529           INY              
E0CD2F: CD 00 C8    >530  BIT0     CMP   $C800       ;DISABLE DDT RAM
E0CD32: B9 00 C8    >531           LDA   MSGSWSET,Y 
E0CD35: CD 00 CF    >532           CMP   $CF00       ;ENABLE DDT RAM
E0CD38: 20 3E CD    >533           JSR   WRITECK7   
E0CD3B: 90 F2 =CD2F >534           BCC   BIT0       
E0CD3D: 60          >535           RTS              
                    >536  
                    >537  **************************************************
                    >538  * THIS ROUTINE MUST BE ABOVE $CF00
                    >539  **************************************************
                    >540  
                    >541  WRITECK7                  
E0CD3E: C8          >542           INY              ;NEXT CHARACTER
E0CD3F: C9 84       >543           CMP   #EOT        ;FINISHED?
E0CD41: F0 05 =CD48 >544           BEQ   WRITDON7   ;IF YES, CARRY ALSO SET
E0CD43: 20 02 CA    >545           JSR   COUT        ;DISPLAY CHARACTER
E0CD46: 18          >546           CLC              
E0CD47: 60          >547           RTS              
                    >548  WRITDON7                  
E0CD48: AC 47 C8    >549           LDY   YBUFF       ;RESTORE
E0CD4B: 38          >550           SEC              
E0CD4C: 60          >551           RTS              
                    >552  
                    >553  *-------------------------------------------------
                    >554  * Display memory window
                    >555  
E0CD4D: AD 24 C8    >556  DISMEMW  LDA   IOMODE      ;DISPLAY ONLY IF SCREEN I/O
E0CD50: D0 3A =CD8C >557           BNE   :END        ;IF NOT SCREEN I/O
                    >558  
                    >559  * Set window limits
                    >560  
E0CD52: A9 06       >561           LDA   #6         
E0CD54: 8D 01 C9    >562           STA   WINDTOP    
E0CD57: A9 2A       >563           LDA   #42        
E0CD59: 8D FF C8    >564           STA   WINDLEFT   
E0CD5C: A9 0D       >565           LDA   #13        
E0CD5E: 8D 00 C9    >566           STA   WINDWDTH   
E0CD61: A9 12       >567           LDA   #18        
E0CD63: 8D 02 C9    >568           STA   WINDBTM    
E0CD66: 20 58 CC    >569           JSR   HOME       
                    >570  
                    >571  * Display selected memory locations
                    >572  
E0CD69: A2 21       >573           LDX   #11*3       ;0-11 LOCATIONS 3 BYTES EACH
E0CD6B: BD AA C8    >574  :NEXTMEM LDA   MEMWADR,X  ;GET DATA BANK TO ACCESS
E0CD6E: 8D 3C C8    >575           STA   DBRDDT     
E0CD71: BD AB C8    >576           LDA   MEMWADR+1,X 
E0CD74: 8D 19 C9    >577           STA   HIADD      
E0CD77: BD AC C8    >578           LDA   MEMWADR+2,X 
E0CD7A: 8D 18 C9    >579           STA   LOWADD     
E0CD7D: 20 2F CF    >580           JSR   DSMWASC     ;DISPLAY MEM W/ASCII
E0CD80: E0 00       >581           CPX   #0          ;AVOID SCROLL
E0CD82: F0 08 =CD8C >582           BEQ   :END       
E0CD84: 20 95 CB    >583           JSR   RETURN     
E0CD87: CA          >584           DEX              
E0CD88: CA          >585           DEX              
E0CD89: CA          >586           DEX              
E0CD8A: 10 DF =CD6B >587           BPL   :NEXTMEM   
E0CD8C: 60          >588  :END     RTS              
                    >589  
                    >590  *-------------------------------------------------
                    >591  * Display the effective address window
                    >592  
E0CD8D: AD 24 C8    >593  DISEFFW  LDA   IOMODE      ;DISPLAY ONLY IF SCREEN I/O
E0CD90: D0 46 =CDD8 >594           BNE   :END        ;IF NOT SCREEN I/O
                    >595  
                    >596  * Set window limits
E0CD92: A9 13       >597           LDA   #19        
E0CD94: 8D 01 C9    >598           STA   WINDTOP    
E0CD97: A9 2A       >599           LDA   #42        
E0CD99: 8D FF C8    >600           STA   WINDLEFT   
E0CD9C: A9 0D       >601           LDA   #13        
E0CD9E: 8D 00 C9    >602           STA   WINDWDTH   
E0CDA1: A9 18       >603           LDA   #24        
E0CDA3: 8D 02 C9    >604           STA   WINDBTM    
E0CDA6: 20 58 CC    >605           JSR   HOME       
                    >606  
                    >607  * Get effective address
E0CDA9: AD D0 C8    >608           LDA   EFFADRS+2  ;PBR OF EFFECTIVE ADRS
E0CDAC: 8D 3C C8    >609           STA   DBRDDT      ;BANK TO ACCESS
                    >610  
E0CDAF:             >611           MEMORY16         
E0CDAF: C2 20       >611           REP   #$20       
                    >611           <<<              
E0CDB1: AD CE C8    >612           LDA   EFFADRS    
                    >613  
                    >614  * Start display 2 bytes before effective address
E0CDB4: 3A          >615           DEC              
E0CDB5: 3A          >616           DEC              
E0CDB6: 8D 18 C9    >617           STA   LOWADD     
E0CDB9:             >618           MEMORY8          
E0CDB9: E2 20       >618           SEP   #$20       
                    >618           <<<              
                    >619  
                    >620  * Display 5 bytes
E0CDBB: A2 04       >621           LDX   #4         
E0CDBD: AD 19 C9    >622  :NEXTEFF LDA   HIADD      
E0CDC0: C9 C0       >623           CMP   #$C0        ;DO NOT DISPLAY SOFT SWITCHES
E0CDC2: F0 03 =CDC7 >624           BEQ   :NEXT      
E0CDC4: 20 2F CF    >625           JSR   DSMWASC     ;DISPLAY MEM W/ASCII
E0CDC7:             >626  :NEXT    MEMORY16         
E0CDC7: C2 20       >626           REP   #$20       
                    >626           <<<              
E0CDC9: EE 18 C9    >627           INC   LOWADD      ;INC POINTER
E0CDCC:             >628           MEMORY8          
E0CDCC: E2 20       >628           SEP   #$20       
                    >628           <<<              
E0CDCE: E0 00       >629           CPX   #0          ;AVOID SCROLL
E0CDD0: F0 06 =CDD8 >630           BEQ   :END       
E0CDD2: 20 95 CB    >631           JSR   RETURN     
E0CDD5: CA          >632           DEX              
E0CDD6: 10 E5 =CDBD >633           BPL   :NEXTEFF   
E0CDD8: 60          >634  :END     RTS              
                    >635  
                    >636  *-------------------------------------------------
                    >637  * Display the BRK window
                    >638  
E0CDD9: AD 24 C8    >639  DISBRKW  LDA   IOMODE      ;DISPLAY ONLY IF SCREEN I/O
E0CDDC: D0 43 =CE21 >640           BNE   :DSEND      ;IF NOT SCREEN I/O
                    >641  
                    >642  * Set window limits
E0CDDE: A9 06       >643           LDA   #6         
E0CDE0: 8D 01 C9    >644           STA   WINDTOP    
E0CDE3: A9 38       >645           LDA   #56        
E0CDE5: 8D FF C8    >646           STA   WINDLEFT   
E0CDE8: A9 0F       >647           LDA   #15        
E0CDEA: 8D 00 C9    >648           STA   WINDWDTH   
E0CDED: A9 11       >649           LDA   #17        
E0CDEF: 8D 02 C9    >650           STA   WINDBTM    
E0CDF2: 20 3F CC    >651           JSR   CLRHOME    
                    >652  
                    >653  * Display the most recent BRK info, start with hard break.
E0CDF5: A9 C8       >654           LDA   #"H"       
E0CDF7: 20 02 CA    >655           JSR   COUT       
E0CDFA: 20 C6 CF    >656           JSR   TRANSFR7   ;DISPLAY HARD BRK IF ANY
E0CDFD: 9E          >657           DFB   DSPHBPC     ;code
E0CDFE: 20 00 CA    >658           JSR   CROUT      
                    >659  
                    >660  * Display other BRKs
E0CE01: AC F8 C8    >661           LDY   POINT       ;BRK STACK
E0CE04: F0 1B =CE21 >662           BEQ   :DSEND      ;IF NO BRKS
E0CE06: A2 09       >663           LDX   #9          ;DO 10 BRKS
E0CE08: 8E 49 C8    >664  :NEXTBP  STX   XBUFF      
E0CE0B: 88          >665           DEY              ;POINT AT LAST BRK
E0CE0C: 20 C6 CF    >666           JSR   TRANSFR7   ;DISPLAY 1 BRK
E0CE0F: 21          >667           DFB   DSPBRKC     ;code
E0CE10: C0 00       >668           CPY   #0          ;FINISHED ?
E0CE12: F0 0D =CE21 >669           BEQ   :DSEND      ;IF YES
E0CE14: AE 49 C8    >670           LDX   XBUFF      
E0CE17: E0 00       >671           CPX   #0          ;AVOID SCROLL
E0CE19: F0 06 =CE21 >672           BEQ   :DSEND     
E0CE1B: 20 95 CB    >673           JSR   RETURN     
E0CE1E: CA          >674           DEX              
E0CE1F: 10 E7 =CE08 >675           BPL   :NEXTBP    
E0CE21: 60          >676  :DSEND   RTS              
                    >677  
                    >678  *-------------------------------------------------
                    >679  * Display protection window
                    >680  
E0CE22: AD 24 C8    >681  DISPROTW LDA   IOMODE      ;SCREEN I/O ?
E0CE25: D0 59 =CE80 >682           BNE   :END        ;IF NOT
                    >683  
                    >684  * Set window limits
E0CE27: A9 12       >685           LDA   #18        
E0CE29: 8D 01 C9    >686           STA   WINDTOP    
E0CE2C: A9 38       >687           LDA   #56        
E0CE2E: 8D FF C8    >688           STA   WINDLEFT   
E0CE31: A9 0F       >689           LDA   #15        
E0CE33: 8D 00 C9    >690           STA   WINDWDTH   
E0CE36: A9 18       >691           LDA   #24        
E0CE38: 8D 02 C9    >692           STA   WINDBTM    
E0CE3B: 20 58 CC    >693           JSR   HOME       
                    >694  
                    >695  * Display protection info
E0CE3E: A2 1E       >696           LDX   #6*5        ;6 BUFFERS WITH 0-5 BYTES EACH
E0CE40: 20 1A CA    >697  :NEXTPRT JSR   SPACE       ;1 SPACE
E0CE43: BD D1 C8    >698           LDA   PROTADR,X  ;GET PROTECTION INFO
E0CE46: 20 02 CA    >699           JSR   COUT        ;TYPE OF PROT
E0CE49: BD D2 C8    >700           LDA   PROTADR+1,X 
E0CE4C: 8D 3C C8    >701           STA   DBRDDT     ;BANK TO ACCESS
E0CE4F: BD D3 C8    >702           LDA   PROTADR+2,X 
E0CE52: 8D 19 C9    >703           STA   HIADD      
E0CE55: BD D4 C8    >704           LDA   PROTADR+3,X 
E0CE58: 8D 18 C9    >705           STA   LOWADD     
E0CE5B: 20 18 CF    >706           JSR   DSPADRS     ;DISPLAY 24 BIT ADDRESS
E0CE5E: A9 AE       >707           LDA   #"."       
E0CE60: 20 02 CA    >708           JSR   COUT       
E0CE63: BD D5 C8    >709           LDA   PROTADR+4,X 
E0CE66: 8D 19 C9    >710           STA   HIADD      
E0CE69: BD D6 C8    >711           LDA   PROTADR+5,X 
E0CE6C: 8D 18 C9    >712           STA   LOWADD     
E0CE6F: 20 23 CF    >713           JSR   DSP16ADR   ;DISPLAY 16 BIT ADDRESS
E0CE72: E0 00       >714           CPX   #0          ;AVOID SCROLL
E0CE74: F0 0A =CE80 >715           BEQ   :END       
E0CE76: 20 95 CB    >716           JSR   RETURN     
E0CE79: 8A          >717           TXA              
E0CE7A: 38          >718           SEC              
E0CE7B: E9 06       >719           SBC   #6          ;NEXT PROT BUFFER
E0CE7D: AA          >720           TAX              
E0CE7E: 10 C0 =CE40 >721           BPL   :NEXTPRT   
E0CE80: 60          >722  :END     RTS              
                    >723  
                    >724  *----------------------------------------------------
                    >725  * Display FLAG, MEM, EFF, and STACK windows
                    >726  
E0CE81: AD 24 C8    >727  DISFMES  LDA   IOMODE      ;SCREEN I/O ?
E0CE84: F0 03 =CE89 >728           BEQ   :SCREEN    
E0CE86: 4C 17 CF    >729           JMP   :END        ;IF NOT
                    >730  
E0CE89: 2C 98 C8    >731  :SCREEN  BIT   WINDFLG     ;are windows on?
E0CE8C: 10 05 =CE93 >732           BPL   :ON         ;If yes then skip "ON" command
                    >733  
E0CE8E: 20 C6 CF    >734           JSR   TRANSFR7   ;Do "ON" command to display windows
E0CE91: 8E          >735           DFB   DISPONC     ;code
E0CE92: 60          >736           RTS              
                    >737  
E0CE93: 20 A2 CC    >738  :ON      JSR   DISFLGW     ;DISPLAY FLAG WINDOW
                    >739  
E0CE96:             >740           INDEX16          
E0CE96: C2 10       >740           REP   #$10       
                    >740           <<<              
E0CE98: BA          >741           TSX              
E0CE99: 8E A1 C9    >742           STX   TEMP        ;SAVE CURRENT STACK POINTER
E0CE9C: A2 9E C9    >743           LDX   #DDTSTACK  
E0CE9F: 9A          >744           TXS              ;PUT STACK IN DDT RAM
E0CEA0:             >745           INDEX8           
E0CEA0: E2 10       >745           SEP   #$10       
                    >745           <<<              
                    >746  
E0CEA2: 20 C6 CF    >747           JSR   TRANSFR7   ;SWAP WORKBUFFER WITH WORK STACK
E0CEA5: 86          >748           DFB   STKSWAPC   ;code 
                    >749  
E0CEA6: 20 4D CD    >750           JSR   DISMEMW     ;DISPLAY MEM WINDOW
E0CEA9: 20 8D CD    >751           JSR   DISEFFW     ;DISPLAY EFF WINDOW
                    >752  
                    >753  * Display STACK window
                    >754  
                    >755  * Set window limits, start at 2nd line down
E0CEAC: A9 06       >756           LDA   #6         
E0CEAE: 8D 01 C9    >757           STA   WINDTOP    
E0CEB1: A9 48       >758           LDA   #72        
E0CEB3: 8D FF C8    >759           STA   WINDLEFT   
E0CEB6: A9 08       >760           LDA   #8         
E0CEB8: 8D 00 C9    >761           STA   WINDWDTH   
E0CEBB: A9 18       >762           LDA   #24        
E0CEBD: 8D 02 C9    >763           STA   WINDBTM    
E0CEC0: 20 58 CC    >764           JSR   HOME       
                    >765  
                    >766  * Display 18 bytes of stack info
E0CEC3: A2 11       >767           LDX   #17        
                    >768  
                    >769  * Get stack location
E0CEC5: 9C 3C C8    >770           STZ   DBRDDT      ;ACCESS BANK 0
E0CEC8: AD 17 C8    >771           LDA   STACK       ;LOW BYTE OF STACK POINTER
E0CECB: A8          >772           TAY              ;SAVE
                    >773  * Start display 10 bytes above pointer
E0CECC: 18          >774           CLC              
E0CECD: 69 0A       >775           ADC   #10        
E0CECF: 8D 18 C9    >776           STA   LOWADD     
E0CED2: AD 18 C8    >777           LDA   STACK+1    ;HI BYTE OF STACK
E0CED5: 2C 1B C9    >778           BIT   EMULATE    ;IF NATIVE MODE THEN
E0CED8: 30 02 =CEDC >779           BMI   :ENDI      ;IF NOT
E0CEDA: 69 00       >780           ADC   #0         ;2 BYTE STACK
E0CEDC: 8D 19 C9    >781  :ENDI    STA   HIADD      
                    >782  
                    >783  * Calculate pointer offset for stack buffer
E0CEDF: 98          >784           TYA              
E0CEE0: 38          >785           SEC              
E0CEE1: ED 5E C8    >786           SBC   OLDSTACK   
E0CEE4: 18          >787           CLC              
E0CEE5: 69 0B       >788           ADC   #STACKBUF-4 
E0CEE7: A8          >789           TAY              ;Y contains stack buffer pointer
                    >790  
E0CEE8: 20 23 CF    >791  :NEXTSTK JSR   DSP16ADR   ;DISPLAY 16 BIT ADRS
E0CEEB: 5A          >792           PHY              
E0CEEC: A0 00       >793           LDY   #0         
E0CEEE: 20 C6 CF    >794           JSR   TRANSFR7   ;GET DATA BYTE
E0CEF1: 00          >795           DFB   LDAINDYC   ;code
E0CEF2: 7A          >796           PLY              
E0CEF3: 20 4B CF    >797           JSR   DCOLBYT     ;DISPLAY ":" & DATA BYTE
E0CEF6: 8A          >798           TXA              ;TEST COUNT TO AVOID SCROLL
E0CEF7: F0 12 =CF0B >799           BEQ   :DSEND     
E0CEF9: 20 95 CB    >800           JSR   RETURN     
E0CEFC: 2C 1B C9    >801           BIT   EMULATE     ;IF NATIVE MODE THEN
E0CEFF: 30 02 =CF03 >802           BMI   :ENDI2      ;IF NOT
E0CF01:             >803           MEMORY16         ;16 BIT ACC
E0CF01: C2 20       >803           REP   #$20       
                    >803           <<<              
E0CF03: CE 18 C9    >804  :ENDI2   DEC   LOWADD      ;DEC 16 BIT STACK POINTER
E0CF06:             >805           MEMORY8          ;8 BIT ACC
E0CF06: E2 20       >805           SEP   #$20       
                    >805           <<<              
E0CF08: CA          >806           DEX              
E0CF09: 10 DD =CEE8 >807           BPL   :NEXTSTK   
                    >808  
E0CF0B: 20 C6 CF    >809  :DSEND   JSR   TRANSFR7   ;SWAP WORK BUFFER WITH WORK STACK
E0CF0E: 86          >810           DFB   STKSWAPC   ;code 
                    >811  
E0CF0F:             >812           INDEX16          
E0CF0F: C2 10       >812           REP   #$10       
                    >812           <<<              
E0CF11: AE A1 C9    >813           LDX   TEMP        ;GET STACK POINTER
E0CF14: 9A          >814           TXS              ;RESTORE
E0CF15:             >815           INDEX8           
E0CF15: E2 10       >815           SEP   #$10       
                    >815           <<<              
                    >816  
E0CF17: 60          >817  :END     RTS              
                    >818  
                    >819           MX    %11        
                    >820  
                    >821  ***** SUBROUTINES *****
                    >822  
                    >823  *-------------------------------------------------
                    >824  * Display 24 bit address from DBRDDT, HIADD, LOWADD
                    >825  
E0CF18: AD 3C C8    >826  DSPADRS  LDA   DBRDDT     ;BANK
E0CF1B: 20 40 CA    >827           JSR   PRBYTE     
E0CF1E: A9 AF       >828           LDA   #"/"       
E0CF20: 20 02 CA    >829           JSR   COUT       
                    >830  
                    >831  *-------------------------------------------------
                    >832  * Alt entry, display 16 bit address
                    >833  
E0CF23: AD 19 C9    >834  DSP16ADR LDA   HIADD      
E0CF26: 20 40 CA    >835           JSR   PRBYTE     
E0CF29: AD 18 C9    >836           LDA   LOWADD     
E0CF2C: 4C 40 CA    >837           JMP   PRBYTE     
                    >838  
                    >839  *-------------------------------------------------
                    >840  * Display 24 bit address with hex and ASCII
                    >841  
E0CF2F: 20 18 CF    >842  DSMWASC  JSR   DSPADRS     ;DISPLAY 24 BIT ADRS
E0CF32: 20 45 CF    >843           JSR   DSPCBYT     ;DISPLAY ":" HEX BYTE
                    >844  
                    >845  * display the ascii equivalent (don't display control codes)
                    >846  
E0CF35: 48          >847           PHA              
E0CF36: 20 1A CA    >848           JSR   SPACE       ;1 SPACE
E0CF39: 68          >849           PLA              
E0CF3A: 10 06 =CF42 >850           BPL   :DISOK     
E0CF3C: C9 A0       >851           CMP   #$A0       
E0CF3E: B0 02 =CF42 >852           BGE   :DISOK     
E0CF40: 09 40       >853           ORA   #$40        ;CHANGE TO UPPER CASE
E0CF42: 4C 02 CA    >854  :DISOK   JMP   COUT        ;DISPLAY ASCII
                    >855  
                    >856  *-------------------------------------------------
                    >857  * Display ":" followed by hex data byte
                    >858  
E0CF45: A0 00       >859  DSPCBYT  LDY   #0         
E0CF47: 20 C6 CF    >860           JSR   TRANSFR7   ;GET CHAR
E0CF4A: 00          >861           DFB   LDAINDYC   ;code
E0CF4B: 48          >862  DCOLBYT  PHA              ;SAVE HEX DATA
E0CF4C: A9 BA       >863           LDA   #":"       
E0CF4E: 20 02 CA    >864           JSR   COUT       
E0CF51: 68          >865           PLA              ;RETRIEVE CHARACTER
E0CF52: 48          >866           PHA              
E0CF53: 20 40 CA    >867           JSR   PRBYTE      ;DISPLAY AS HEX
E0CF56: 68          >868           PLA              
E0CF57: 60          >869           RTS              
                    >870  
                    >871  ***** THIS SEGMENTS GLOBAL SUBROUTINES *****
                    >872  
                    >873  SUBTABL7                  
                    >874  
            =0107   >875  COUTC    EQU   *-SUBTABL7*4+7+$100 
E0CF58: 01 CA       >876           DA    COUT-1     
                    >877  
            =010F   >878  CROUTC   EQU   *-SUBTABL7*4+7+$100 
E0CF5A: FF C9       >879           DA    CROUT-1    
                    >880  
            =0117   >881  RDCHARC  EQU   *-SUBTABL7*4+7+$100 
E0CF5C: 2E CA       >882           DA    RDCHAR-1   
                    >883  
            =011F   >884  PRERRC   EQU   *-SUBTABL7*4+7+$100 
E0CF5E: 1D CA       >885           DA    PRERR-1    
                    >886  
            =0127   >887  PRBL2C   EQU   *-SUBTABL7*4+7+$100 
E0CF60: 57 CA       >888           DA    PRBL2-1    
                    >889  
            =012F   >890  PRBLNKC  EQU   *-SUBTABL7*4+7+$100 
E0CF62: 55 CA       >891           DA    PRBLNK-1   
                    >892  
            =0137   >893  PRBYTEC  EQU   *-SUBTABL7*4+7+$100 
E0CF64: 3F CA       >894           DA    PRBYTE-1   
                    >895  
            =013F   >896  PRNTAXC  EQU   *-SUBTABL7*4+7+$100 
E0CF66: 3B CA       >897           DA    PRNTAX-1   
                    >898  
            =0147   >899  PRHEXC   EQU   *-SUBTABL7*4+7+$100 
E0CF68: 4A CA       >900           DA    PRHEX-1    
                    >901  
            =014F   >902  RECEIVEC EQU   *-SUBTABL7*4+7+$100 
E0CF6A: 65 CA       >903           DA    RECEIVE-1  
                    >904  
            =0157   >905  GETLNC   EQU   *-SUBTABL7*4+7+$100 
E0CF6C: A4 CA       >906           DA    GETLN-1    
                    >907  
            =015F   >908  GETLNZC  EQU   *-SUBTABL7*4+7+$100 
E0CF6E: A1 CA       >909           DA    GETLNZ-1   
                    >910  
            =0167   >911  GETLNNOC EQU   *-SUBTABL7*4+7+$100 
E0CF70: BD CA       >912           DA    GETLNNO-1  
                    >913  
            =016F   >914  CLREOLC  EQU   *-SUBTABL7*4+7+$100 
E0CF72: 16 CC       >915           DA    CLREOL-1   
                    >916  
            =0177   >917  BELLC    EQU   *-SUBTABL7*4+7+$100 
E0CF74: 2A CA       >918           DA    BELL-1     
                    >919  
            =017F   >920  WAITC    EQU   *-SUBTABL7*4+7+$100 
E0CF76: 63 CC       >921           DA    WAIT-1     
                    >922  
            =0187   >923  SETSCRNC EQU   *-SUBTABL7*4+7+$100 
E0CF78: 78 CC       >924           DA    SETSCRN-1  
                    >925  
            =018F   >926  VTABC    EQU   *-SUBTABL7*4+7+$100 
E0CF7A: E5 CB       >927           DA    VTAB-1     
                    >928  
            =0197   >929  CLRHOMEC EQU   *-SUBTABL7*4+7+$100 
E0CF7C: 3E CC       >930           DA    CLRHOME-1  
                    >931  
            =019F   >932  HOMEC    EQU   *-SUBTABL7*4+7+$100 
E0CF7E: 57 CC       >933           DA    HOME-1     
                    >934  
            =01A7   >935  DISFLGWC EQU   *-SUBTABL7*4+7+$100 
E0CF80: A1 CC       >936           DA    DISFLGW-1  
                    >937  
            =01AF   >938  DISMEMWC EQU   *-SUBTABL7*4+7+$100 
E0CF82: 4C CD       >939           DA    DISMEMW-1  
                    >940  
            =01B7   >941  DISBRKWC EQU   *-SUBTABL7*4+7+$100 
E0CF84: D8 CD       >942           DA    DISBRKW-1  
                    >943  
            =01BF   >944  DISPROTWC EQU  *-SUBTABL7*4+7+$100 
E0CF86: 21 CE       >945           DA    DISPROTW-1 
                    >946  
            =01C7   >947  DISFMESC EQU   *-SUBTABL7*4+7+$100 
E0CF88: 80 CE       >948           DA    DISFMES-1  
                    >949  
                    >950  *****************************************
                    >951  *  SEGMENT CROSSOVER AREA  *
                    >952  *****************************************
                    >953  
            =0007   >955  S7END    =     $E0CF91-*  
                    >956           do    nolist     
                    >957           LST   OFF        
                    >958           fin              
                    >959           ERR   *-1/$E0CF91 
E0CF8A: FF FF FF FF >960           DS    $E0CF91-*,$FF 
                    >961  
                    >962  
                    >963  ******** SAVE THE ACC, X, Y AND P REGISTERS *******
                    >964  * Returns with MX = 11, savesEregisters
                    >965  
                    >966  SAVEAXP7                  
E0CF91: 08          >967           PHP              ;SAVE STATUS
E0CF92:             >968           MX16             
E0CF92: C2 30       >968           REP   #$30       
                    >968           <<<              
E0CF94: 8E 63 C8    >969           STX   XSAVESEG   ;save 16 bits
E0CF97: 8C 65 C8    >970           STY   YSAVESEG   ;save 16 bits
E0CF9A: 8D 61 C8    >971           STA   ASAVESEG   ;save 16 bits
E0CF9D:             >972           MX8              
E0CF9D: E2 30       >972           SEP   #$30       
                    >972           <<<              
E0CF9F: 68          >973           PLA              ;GET STATUS
E0CFA0: 8D 67 C8    >974           STA   PSAVESEG   ;SAVE
E0CFA3: 60          >975           RTS              
                    >976  
                    >977  ****** RESTORE THE ACC, X, Y AND P REGISTERS ******
                    >978  * restores registers
                    >979  
                    >980  RESTAXP7                  
E0CFA4:             >981           MEMORY8          
E0CFA4: E2 20       >981           SEP   #$20       
                    >981           <<<              
E0CFA6: AD 67 C8    >982           LDA   PSAVESEG   
E0CFA9: 48          >983           PHA              
E0CFAA:             >984           MX16             
E0CFAA: C2 30       >984           REP   #$30       
                    >984           <<<              
E0CFAC: AE 63 C8    >985           LDX   XSAVESEG   
E0CFAF: AC 65 C8    >986           LDY   YSAVESEG   
E0CFB2: AD 61 C8    >987           LDA   ASAVESEG   
E0CFB5: 28          >988           PLP              
E0CFB6: 60          >989           RTS              
                    >990           MX    %11        
                    >991  
                    >992  *----------------------------------------
                    >993  * Do a direct transfer to other segments
                    >994  
                    >995  JUMPSEG7                  
E0CFB7: 20 91 CF    >996           JSR   SAVEAXP7   
E0CFBA: AC 29 C8    >997           LDY   SLOTN0     
E0CFBD: 68          >998           PLA              ;pull junk byte from dest. seg
E0CFBE: 68          >999           PLA              ;get destination segment
E0CFBF: 99 88 C0    >1000          STA   SEGMBASE,Y ;the next inst' will be in new seg
E0CFC2: 20 A4 CF    >1001          JSR   RESTAXP7   ;restore after xfer from other seg
E0CFC5: 60          >1002          RTS              ;pull destination address from stack
                    >1003 
                    >1004 * TRANSFER TO OTHER SEGMENTS
                    >1005 
                    >1006 TRANSFR7                  
                    >1007 
E0CFC6: 20 91 CF    >1008          JSR   SAVEAXP7   
E0CFC9:             >1009          MEMORY16         
E0CFC9: C2 20       >1009          REP   #$20       
                    >1009          <<<              
E0CFCB: 68          >1010          PLA              ;get return address from stack
E0CFCC: 1A          >1011          INC              ;inc to point at code byte & for RTS
E0CFCD: 48          >1012          PHA              
E0CFCE:             >1013          MEMORY8          
E0CFCE: E2 20       >1013          SEP   #$20       
                    >1013          <<<              
E0CFD0: A9 07       >1014          LDA   #7          ;CURRENT SEG #
E0CFD2: 48          >1015          PHA              
E0CFD3: A0 00       >1016          LDY   #0         
E0CFD5: B3 02       >1017          LDA   (2,S),Y     ;GET CODE BYTE
E0CFD7: 48          >1018          PHA              ;SAVE CODE
E0CFD8: 29 07       >1019          AND   #$07        ;STRIP ALL BUT SEG #
E0CFDA: AC 29 C8    >1020          LDY   SLOTN0     
E0CFDD: 99 88 C0    >1021          STA   SEGMBASE,Y ;NEXT INSTR. RUN FROM NEW SEGMENT
                    >1022 * NEW SEGMENT
E0CFE0: 68          >1023          PLA              ;GET CODE
E0CFE1: F4 F0 CF    >1024          PEA   RETURN7     ;where to return to
E0CFE4: 29 F8       >1025          AND   #$F8        ;STIP OFF SEG# LEAVING SUB #
E0CFE6: 4A          >1026          LSR              
E0CFE7: 4A          >1027          LSR              ;LEAVE SUB# MULTIPLIED BY 2
                    >1028 * GET ADDRESS OF SUB FROM SUBTABL & PUSH ON STACK
E0CFE8: A8          >1029          TAY              
E0CFE9:             >1030          MEMORY16         
E0CFE9: C2 20       >1030          REP   #$20       
                    >1030          <<<              
E0CFEB: B9 58 CF    >1031          LDA   SUBTABL7,Y 
E0CFEE: 48          >1032          PHA              
E0CFEF: 80 B3 =CFA4 >1033          BRA   RESTAXP7   ;RESTORE REGISTERS, RTS TO SUBROUTINE
                    >1034          MX    %11        
                    >1035 
                    >1036 * RETURN HERE FROM SUBROUTINE
                    >1037 
            =E0CFF0 >1038 RETURN7  EQU   *-1        
E0CFF1: 20 91 CF    >1039          JSR   SAVEAXP7   
E0CFF4: 68          >1040          PLA              ;SEG # TO RETURN TO
E0CFF5: AC 29 C8    >1041          LDY   SLOTN0     
E0CFF8: 99 88 C0    >1042          STA   SEGMBASE,Y ;RETURN TO SEGMENT
E0CFFB: 80 A7 =CFA4 >1043          BRA   RESTAXP7   
                    >1044 
E0CFFD: FF FF FF    >1045          DS    \,$FF       ;PUT OBJECT AT NEXT PAG
                     48   


End Merlin-16 assembly, 16384 bytes, 0 errors, 11056 lines, 1110 symbols.

Elapsed time = 21 minutes, 52 seconds.

Symbol table, alphabetical order:

   ACC     =$E0C811    ACC1    =$E0C811    ADCBALT =$E0CEAB    ADDL1   =$E0CF30    ADDL2   =$E0CF39    ADDRS2  =$E0CDC4
   ADDRS2F =$E0C87E    ADRHEX  =$E0CBDA    ALTZP   =$E0C016    ALTZPBF =$E0C87C    AM_A_NE =$19        ANDDSFL =$E0CC9D
   ASAVESEG=$E0C861    ASLUPMW =$E0CDAE    ASTAST  =$E0CBCB    AUXZP   =$E0C009    AX2S1_A =$E0CD25    AX2S1_AC=$0128
   AX2S1_B =$E0CD30    AX2S1_C =$E0CD33    BADPAR  =$04        BADPAR0 =$E0CA73    BADRT   =$30        BANKALT =$E0CEAD
   BANKCHEK=$E0CDC8    BANKCHEKC=$0134     BANKEFF =$E0CE21    BANKENT =$E0C8F6    BANKSET =$E0CE20    BANKTABL=$E0C88A
   BAS2H   =$2B        BAS2L   =$2A        BASBUF  =$E0C8FB    BASH    =$29        BASL    =$28        BCKSPC  =$E0CAB7
   BEL     =$87        BELL    =$E0CA2B    BELLC   =$0177      BELLONE =$E0CB35    BELLRTS =$E0CB46    BELLTWO =$E0CB3B
   BIT0    =$E0CD2F    BKPDIS  =$E0CAA6    BNCHBACK=$E0CBAD    BPERR1  =$E0CB5F    BPERR2  =$E0CBD7    BPERR5  =$E0CC59
   BREAK   =$E0C88A    BRKDATA =$E0C9C8    BRKFUL  =$10        BRKHI   =$E0C89C    BRKLOW  =$E0C8CE    BRKPASHI=$E0C964
   BRKPASLO=$E0C996    BRKPBR  =$E0C86A    BRKSTUF =$E0C9B2    BRKTGHI =$E0C900    BRKTGLOW=$E0C932    BRKTRC  =$E0CB53
   BRKTRFLG=$E0C8A9    BRKTYPE =$E0C838    BRKWFLG =$E0C899    BRNCHOUT=$E0CC09    BYTESP3 =$E0CE6F    C0INT   =$E0C881
   CALCEFF =$E0CE3C    CALCEFFC=$013C      CALCTIME=$E0CE9A    CARDSLT1=$E0CC5A    CHEKSYMB=$E0CACE    CHK16X  =$E0CC83
   CHK816  =$E0CC45    CHKCTRLS=$E0CBE7    CHKESC  =$E0CC15    CHKHEX  =$E0CD05    CHKKSW  =$E0CD5C    CHKMODE =$E0CEBE
   CHKRANG =$E0CF28    CHKRANGC=$014D      CHKREAD =$E0CD12    CHKREADA=$E0CD14    CHKREADAC=$0111     CHKREADC=$0109
   CHKRETRN=$E0CB96    CHKZERO =$E0CB84    CKACCES =$E0CE0A    CKACCESC=$0135      CKRDERR =$E0CD4B    CKREAD16=$E0CDCC
   CLEARALL=$E0CC87    CLEOLZ  =$E0CC1A    CLRBOT  =$E0CC45    CLREOL  =$E0CC17    CLREOLC =$016F      CLRHARD =$E0CC94
   CLRHOME =$E0CC3F    CLRHOMEC=$0197      CLRLETER=$E0CF50    CLRSHFT =$E0CAED    CMDDORTS=$E0C85B    CMDMENU =$E0CB90
   CMDOCONT=$E0CA49    CMDTBLSIZ=$0A       CMNDSEG1=$E0C925    CMNDSEG2=$E0C941    CMNDSEG3=$E0C945    CMNDSEG4=$E0C947
   CMNDSEG5=$E0C955    CMOSFLAG=$E0C823    CNSLOT  =$07F8      COL80ON =$E0C00D    COMDAE  =$E0CBC7    COMDBE  =$E0CC03
   COMDDAST=$E0CBAF    COMDDE  =$E0CBF9    COMDDR  =$E0CBD0    COMDEE  =$E0CC0E    COMDEND =$E0C913    COMDER  =$E0CA8B
   COMDET  =$E0CBCC    COMDEX  =$E0CA65    COMDGO  =$E0CC4A    COMDHB  =$E0CAAC    COMDIE  =$E0CC1D    COMDJS  =$E0CEC9
   COMDJUMP=$E0C913    COMDKEY =$E0CA47    COMDLI  =$E0CC51    COMDMA  =$E0CA14    COMDMD  =$E0CB57    COMDMM  =$E0CB01
   COMDMO  =$E0CB37    COMDMW  =$E0CD26    COMDOFF =$E0CF15    COMDON  =$E0CF01    COMDPC  =$E0CB9C    COMDPE  =$E0CB1F
   COMDPP  =$E0CB2D    COMDPW  =$E0CBE0    COMDQE  =$E0CC2C    COMDQU  =$E0CBAB    COMDRA  =$E0CAFC    COMDRB  =$E0CADC
   COMDRH  =$E0CAF7    COMDRT  =$E0CEEE    COMDSB  =$E0CA00    COMDSD  =$E0CB3B    COMDSE  =$E0CBE5    COMDSEGN=$E0C96D
   COMDSKIP=$E0CA23    COMDSS  =$E0CA60    COMDST  =$E0CA68    COMDTR  =$E0CA5D    COMDTS  =$E0CA00    COMDXE  =$E0CBD1
   COMDYE  =$E0CBDB    COMMANDS=$E0C8B9    COMMDRCL=$E0CA34    COMRTFLG=$E0C89C    CONDBRKS=$E0CE48    CONDEQ  =$E0CE48
   CONDGE  =$E0CE50    CONDGT  =$E0CE58    CONDLE  =$E0CE5E    CONDLT  =$E0CE4C    CONDNE  =$E0CE54    CONTNMI =$E0CA37
   COUT    =$E0CA02    COUT1APL=$FDF0      COUT2   =$E0CC1C    COUT3   =$E0CE75    COUTC   =$0107      CR      =$8D
   CREGOFF =$E0C9DF    CROUT   =$E0CA00    CROUTC  =$010F      CSWH    =$37        CSWL    =$36        CSYMOFF =$E0C9F1
   CTRLS   =$93        CTRLX   =$98        CURSHORZ=$E0C903    CURSVERT=$E0C904    CXFLAG  =$E0C015    CXSTATUS=$E0C917
   DATABRK =$E0C82F    DBR     =$E0C81B    DBRDDT  =$E0C83C    DBYTEEND=$E0CE6E    DCOLBYT =$E0CF4B    DDT0070 =$E0CAA0
   DDT3F8  =$E0C9B5    DDT3FB  =$E0CAA4    DDTSTACK=$E0C99E    DEBUG   =$00        DECHEX  =$E0CEE8    DECIMAL1=$E0C839
   DECIMAL2=$E0C83A    DECIMAL3=$E0C83B    DECMEMLH=$E0CE7A    DECMEMLHC=$010B     DECSW1  =$E0CBE8    DECTGPC =$E0CD53
   DECTGPCC=$0122      DECTOGO =$E0CD56    DELETE  =$FF        DHRTS   =$E0CF2C    DISASM  =$E0CC1D    DISASMC =$0123
   DISBKP  =$E0CE03    DISBREAK=$E0CB18    DISBREAKC=$0105     DISBRKW =$E0CDD9    DISBRKWC=$01B7      DISBROUT=$E0CAC3
   DISBROUTC=$0104     DISEFFW =$E0CD8D    DISFLGW =$E0CCA2    DISFLGWC=$01A7      DISFMES =$E0CE81    DISFMESC=$01C7
   DISHARD =$E0CACF    DISHARDC=$0114      DISHB   =$E0CECD    DISINVBP=$E0CED8    DISMEMW =$E0CD4D    DISMEMWC=$01AF
   DISMODE =$E0CC21    DISNOTRM=$E0CAC9    DISNOTRMC=$010C     DISPADDR=$E0CDA8    DISPAS2 =$E0CE02    DISPASIS=$E0CDEA
   DISPBYTS=$E0CE41    DISPFLAG=$E0C8A7    DISPIOR0=$E0CB4C    DISPON  =$E0CE84    DISPONC =$018E      DISPROTW=$E0CE22
   DISPROTWC=$01BF     DISPSTAT=$E0CB42    DISPTABL=$E0C868    DISREG2 =$E0CA92    DISREG2C=$0112      DISVERS =$E0CAA9
   DISVERSC=$0115      DNARROW =$8A        DOBRK   =$E0CE6A    DOCOUT  =$E0CB22    DODISASM=$E0CB26    DOSUB   =$E0CC1C
   DOWRITE4=$E0CAF1    DOWRLOP2=$E0CC24    DREG    =$E0C819    DSCOPYR =$E0CAE6    DSCOPYRC=$011D      DSMEMCOL=$E0CCD0
   DSMEMCOLC=$0119     DSMWASC =$E0CF2F    DSP16ADR=$E0CF23    DSPADRS =$E0CF18    DSPBORDR=$E0CDDB    DSPBRK  =$E0CE2C
   DSPBRKC =$0121      DSPCBYT =$E0CF45    DSPHBP  =$E0CF14    DSPHBPC =$019E      DTOHFLG =$E0C87D    EFFADRS =$E0C8CE
   EFFM10  =$E0CEEC    EFFM11  =$E0CE5E    EFFM12  =$E0CF05    EFFM13  =$E0CF0A    EFFM14  =$E0CE73    EFFM15  =$E0CE78
   EFFM2   =$E0CE6C    EFFM3   =$E0CEBE    EFFM5   =$E0CE80    EFFM6   =$E0CE99    EFFM7   =$E0CE50    EFFM8   =$E0CEC3
   EFFM9   =$E0CED4    EFFMA   =$E0CEFD    EFFMB   =$E0CE63    EFFMC   =$E0CED9    EFFMF   =$E0CEDE    EFFSTA  =$E0CE8D
   EFFTABL =$E0C8AE    EFLAG   =$E0C89E    EMPTY   =$E0CD11    EMULATE =$E0C91B    ENABLTVC=$E0C844    ENDDISAS=$E0CE35
   ENDSTDR =$E0CAA9    EOT     =$84        ERRBEEP =$E0CDEF    ERRBEEPC=$012D      ERREXIT0=$E0CA75    ERREXIT1=$E0CB61
   ERROR4  =$E0CA57    ESC     =$9B        ETERR   =$E0CEF6    ETFLAG  =$E0C8A3    ETIERSAV=$E0C86F    ETORASAV=$E0C870
   ETORBSAV=$E0C871    ETPCHI  =$E0C873    ETPCLO  =$E0C872    ETRESTOR=$E0CF4C    ETVCONT =$E0CF1A    ETVCONTC=$015A
   ETVECTOR=$E0CA3A    EXCHTEXT=$E0CC99    EXCHZPAG=$E0CD61    EXCONT  =$E0CBE3    EXECUTE =$E0CC9F    EXECUTEC=$0118
   FASTET  =$E0C97E    FINDMNEM=$E0CA8B    FINDOPCD=$E0CE82    FLAGDISP=$E0CD28    FLAGON  =$E0CB4A    FLAGS   =$E0C830
   FLGMOFF =$E0CC95    FOUNDMNE=$E0CAC0    FOUNDOP =$E0CBBC    FROMADRS=$E0CAD1    GETBYTE =$E0CF45    GETCHAR =$E0CD1E
   GETCHOIC=$E0CC2D    GETCHR  =$E0CD06    GETCHRC =$0101      GETCOM  =$E0CA0E    GETCOM0 =$E0CF23    GETCOM1 =$E0CEDF
   GETCOM2 =$E0CBDD    GETCOM3 =$E0CF4A    GETCOM4 =$E0CF49    GETCOMCR=$E0CA00    GETLN   =$E0CAA5    GETLNC  =$0157
   GETLNNO =$E0CABE    GETLNNOC=$0167      GETLNZ  =$E0CAA2    GETNOT  =$E0CAAF    GETPPC  =$E0CBAF    GETSYMB =$E0CCE5
   GOATPC  =$E0CC51    GOFLAG  =$E0C89F    GOPASCAL=$E0CE64    GS_STATE=$E0C068    HALT_ALL=$E0C89B    HARDBOFF=$E0CF43
   HARDPBR =$E0C912    HARDSTP =$E0CA30    HIADD   =$E0C919    HIRESFLG=$E0C01D    HOME    =$E0CC58    HOMEC   =$019F
   IERBUFF =$E0C843    IFLAG   =$E0C8A5    IN      =$E0C963    INAUX   =$E0CA34    INCCH   =$E0CB5B    INCMEMLH=$E0CF0F
   INCMEMLHC=$0113     INCSW1  =$E0CBD5    INCSYMB =$E0CB09    INCTEXT =$E0CCFD MD INDEX16 =$8000   MD INDEX8  =$8000
   INDYBUF =$E0C879    INITCONT=$E0CDC7    INITDISR=$E0CEA4    INITDISRC=$0196     INITFLAG=$E0C876    INITMMV =$E0CEEC
   INITMMVC=$0103      INITPASC=$E0CE35    INITPASCC=$015E     INITRAMV=$E0CD3B    INITRAMVC=$013E     INLENGTH=$E0C907
   INMAIN  =$E0CA54    INPASCAL=$E0CE39    INPASCALC=$0166     INTANLYZ=$E0CC61    INTSTUFF=$E0CE07    INVBREAK=$E0CAF2
   INVCOM  =$01        INVISIBL=$E0C822    INVPROC =$E0CEBC    IOACC   =$E0C888    IOCN0   =$E0C88F    IOCX7   =$E0C884
   IOCX8   =$E0C881    IODBR   =$E0C887    IOLADRS =$E0C885    IOMODE  =$E0C824    IOOPCD  =$E0C884    IOPBR   =$E0C88D
   IOPCHI  =$E0C88C    IOPCLO  =$E0C88B    IORETRN =$E0C871    IORTI   =$E0C889    IORTL   =$E0C88A    IOSEGM  =$E0C88B
   IOSPACE0=$E0C880    IOSPACE1=$E0C882    IOSPACE7=$E0C880    IOSPACE8=$E0C880    IOSTUF0 =$E0C840    IOSTUF1 =$E0C850
   IOSTUF7 =$E0C85C    IOSTUF8 =$E0C86C    IOUSER  =$E0C888    ISAUX   =$E0CE14    ISDEC   =$E0CD50    ISRAM   =$E0CA98
   ISSYMB  =$E0CAF0    ITISHEX =$E0CD4D    JSCONT  =$E0CED4    JUMPSEG0=$E0CFB7    JUMPSEG1=$E0CFB7    JUMPSEG2=$E0CFB7
   JUMPSEG3=$E0CFB7    JUMPSEG4=$E0CFB7    JUMPSEG5=$E0CFB7    KBD     =$E0C000    KBDSTRB =$E0C010    KEY     =$E0C9BA
   KEYCLIK =$E0CA74    KEYIN   =$E0CA8F    KEYIN2  =$E0CA91    KEYINRTS=$E0CA9F    KEYPRES =$E0CA72    KSWH    =$39
   KSWL    =$38        LDAINDY =$E0CC51    LDAINDYC=$0100      LDAOPER =$E0CF1D    LDAPBRIY=$E0CC3F    LDAPCIY =$E0CC45
   LDA_BNK0=$E0CF39    LDA_DREG=$E0CF15    LDA_EFF =$E0CF12    LDA_OPR0=$E0CF18    LEAVTRC =$E0CBD7    LEFT5   =$E0CF33
   LEFTRTS =$E0CB94    LETTER1 =$E0C830    LETTER2 =$E0C831    LETTER3 =$E0C832    LETTER4 =$E0C833    LETTER5 =$E0C834
   LETTER7 =$E0C836    LETTER8 =$E0C837    LF      =$8A        LINEFEED=$E0CB98    LIS0    =$E0CAFF    LIS1    =$E0CAFE
   LIST    =$E0CC5C    LOADMEM =$E0CF17    LOADMEMC=$011B      LOADMRTS=$E0CF26    LOADT   =$E0CA7F    LOOKBRK =$E0CA99
   LOOKDIR =$E0CB70    LOWADD  =$E0C918    LSNYBPW =$E0CCF4    LTABLE1 =$E0CA1C    LTABLE1C=$0106      LTARROW =$88
   LTRACEVC=$E0CA9A    M11CONT =$E0CE56    M12CONT =$E0CEF7    M13CONT =$E0CEE1    M14CONT =$E0CEC9    M15CONT =$E0CE86
   M9CONT  =$E0CEC6    MAERR   =$E0CAA7    MAERRBY2=$E0CBFF    MAINCMEM=$E0CA47    MAINRAM =$E0CE0F    MAINZP  =$E0C008
   MAKEDOT =$E0CCC0    MAKENOP =$E0CE1D    MANEXT  =$E0CBF5    MANOADDR=$E0CA24    MANOTRAM=$E0CC02    MASTLET1=$E0CA4F
   MATCHPC =$E0CDE3    MCCONT  =$E0CF00    MDAGAIN =$E0CB6B    MDLOOP  =$E0CB6D    MDNOADDR=$E0CB67    MEMDISP =$E0CC9D
   MEMHI   =$E0C83E    MEMHORZ =$E0C906    MEMLOW  =$E0C83D MD MEMORY16=$8000   MD MEMORY8 =$8000      MEMPBR  =$E0C908
   MEMWADR =$E0C8AA    MIXEDOFF=$E0C052    MLICODE =$E0CE3A    MLIFLAG =$E0C841    MMDISASC=$E0CCB2    MMDISHEX=$E0CCA2
   MMDISOK =$E0CCC2    MNEMCOMP=$E0C90A    MNEMTABL=$E0C935    MODE    =$E0C9B0    MODONE  =$E0CBC2    MONITOR =$FF69
   MORETR  =$E0CBE7    MOVEONE =$E0CB78    MOVEZERO=$E0CB8D    MSG02   =$E0C832    MSG816  =$E0C83C    MSGAVAIL=$E0C82D
   MSGAVAL2=$E0C8D6    MSGBORD2=$E0C8D0    MSGBORDR=$E0C800    MSGBREAK=$E0C9C1    MSGBRKPT=$E0C813    MSGBROUT=$E0C80E
   MSGCOPYR=$E0C85B    MSGCR   =$E0C841    MSGCRES =$E0C9B1    MSGENTER=$E0C95F    MSGET   =$E0C96C    MSGFENT =$E0C9A9
   MSGFLAGS=$E0C977    MSGFLG16=$E0C990    MSGHARD =$E0C832    MSGHARDB=$E0C81C    MSGINVBP=$E0C800    MSGKEY  =$E0C806
   MSGMODE =$E0C8E2    MSGNOAC =$E0C857    MSGNOTRM=$E0C81E    MSGOFF  =$E0C81E    MSGORNG =$E0C83F    MSGOUT  =$E0C828
   MSGREAL =$E0C9D0    MSGREGA =$E0C800    MSGSKIP =$E0C800    MSGSWSET=$E0C800    MSGVERS =$E0C800    MSNYBPW =$E0CCEB
   MSTATE  =$E0C81C    MTOM10  =$E0CBA8    MWINPUT =$E0CD3D MD MX16    =$8000   MD MX8     =$8000      NEWOPER =$E0CE84
   NEXTFLAG=$E0CB67    NEXTMNEM=$E0CA9F    NEXTOPCD=$E0CEB2    NEXTOPER=$E0CEB8    NEXTREG =$E0CA9E    NEXTSW1 =$E0CBCA
   NEXTSW2 =$E0CBDD    NEXTSYM =$E0CB0A    NEXTSYMB=$E0CCE1    NEXTTEXT=$E0CD3A    NMICOMRT=$E0CB42    NMICONT =$E0C8F7
   NMITRC  =$E0CB75    NMIVEC2 =$E0CA00    NOACCESS=$E0C896    NOACMSG =$E0CAF5    NOACMSGC=$0124      NOBRK   =$E0CE62
   NODISH  =$E0CADA    NOEFF   =$E0CE4D    NOEXTEND=$E0CDC4    NOLIST  =$00        NOSYMBOL=$E0CCF0    NOTAUX  =$E0CE0A
   NOTBREAK=$E0CF06    NOTCR   =$E0CA88    NOTCR1  =$E0CA9D    NOTFULL =$E0CA8E    NUMDISP =$E0C909    NXTCHAR =$E0CABB
   OFFFLAG =$E0C825    OFFSETOK=$E0CBB6    OKCIS4  =$E0CAF4    OKEXIT5 =$E0CBAA    OLDSTACK=$E0C85E    ONEOFFST=$E0CDCD
   ONIFON  =$E0CF0F    OPCODE  =$E0C840    OPERAND =$E0C874    OUTMAIN =$E0CB59    OUTPASCL=$E0CE42    OUTPASCLC=$0176
   OUTPRGR =$E0CAD5    OUTPRGRC=$011C      OUTPUT  =$E0CB47    P16CODE =$E0CE3D    P16FLAG =$E0C842    PACKMNEM=$E0CF27
   PASCALIO=$E0CDD8    PASCALIOC=$0125     PASSFLG =$E0C89A    PBR     =$E0C821    PBR8    =$E0C8A6    PC2LETR =$E0CE70
   PCHI    =$E0C820    PCLO    =$E0C81F    POINT   =$E0C8F8    POSIBLOP=$E0CEA9    PPGETCOM=$E0CB2A    PRBL2   =$E0CA58
   PRBL2C  =$0127      PRBLNK  =$E0CA56    PRBYTE  =$E0CA40    PRBYTEC =$0137      PRERR   =$E0CA1E    PRERRC  =$011F
   PRHEX   =$E0CA4B    PRHEXC  =$0147      PRINT?  =$E0CE2A    PRNTAX  =$E0CA3C    PRNTAXC =$013F      PROCESOK=$E0CEEA
   PROGONLY=$E0C895    PROMPT  =$E0C8FA    PROTADR =$E0C8D1    PSAVESEG=$E0C867    PUTBREAK=$E0CA00    PUTBREAKC=$0102
   PUTBRK2 =$E0CA08    PUTDONE =$E0CA91    PUTSLOT =$E0CFB6    PWINPUT =$E0CBF2    QREG    =$E0C81D    RBOK    =$E0CAE1
   RBTOM11 =$E0CAF5    RDCHAR  =$E0CA2F    RDCHARC =$0117      READAD  =$E0CD36    READAD2 =$E0CD1C    READAUX =$E0C003
   READMAIN=$E0C002    REALBRK =$E0C8F7    REALTIME=$E0C894    RECEIVE =$E0CA66    RECEIVEC=$014F      RELADDRS=$E0CD59
   RELATIVE=$E0CB83    RELLONG =$E0CB92    REPLACE =$E0CC6C    REPLACEC=$0142      RESTAUX =$E0CAB3    RESTAXP0=$E0CFA4
   RESTAXP1=$E0CFA4    RESTAXP2=$E0CFA4    RESTAXP3=$E0CFA4    RESTAXP4=$E0CFA4    RESTAXP5=$E0CFA4    RESTAXP6=$E0CFA4
   RESTAXP7=$E0CFA4    RESTDISP=$E0CBC5    RESTDISPC=$0126     RESTFLAG=$E0C9B1    RESTRT  =$E0CF13    RESTRTC =$0145
   RESTRTS =$E0CC07    RESTSTUF=$E0CAA7    RESTSTUFC=$0116     RESTTEXT=$E0CBA4    RESTTEXTC=$011E     RETURN  =$E0CB95
   RETURN0 =$E0CFF0    RETURN1 =$E0CFF0    RETURN2 =$E0CFF0    RETURN3 =$E0CFF0    RETURN4 =$E0CFF0    RETURN5 =$E0CFF0
   RETURN6 =$E0CFF0    RETURN7 =$E0CFF0    RET_ADD =$E0C913    ROMTORAM=$E0CC58    ROMTORAMC=$011A     RTARROW =$95
   RTBRKFLG=$E0C893    RTJSRFLG=$E0C85D    RTOPCODE=$E0C85C    RTSFLAG =$E0C8A0    RTSREST =$E0CD78    RTSTACK =$E0C85A
   RTSTATUS=$E0C89D    SAVEAXP0=$E0CF91    SAVEAXP1=$E0CF91    SAVEAXP2=$E0CF91    SAVEAXP3=$E0CF91    SAVEAXP4=$E0CF91
   SAVEAXP5=$E0CF91    SAVEAXP6=$E0CF91    SAVEAXP7=$E0CF91    SAVEDISP=$E0CC12    SAVEDISPC=$0136     SAVENEXT=$E0CCC9
   SAVEREG =$E0CD82    SAVESTAT=$E0CB7F    SAVESTK =$E0CD9F    SAVEVIAR=$E0CEFB    SAVEWSTK=$E0CDDF    SBTYPE  =$E0C838
   SCRLMAIN=$E0CBD0    SCROLL1 =$E0CBB0    SCROLL2 =$E0CBC8    SCROLL3 =$E0CBDE    SEG2RTS =$E0CFC5    SEGMBASE=$E0C088
   SELFMOD =$E0C90E    SEND    =$E0CA61    SET80S  =$E0CBFA    SETBANK =$E0CDAD    SETBASE =$E0CBE9    SETETVEC=$E0CEEA
   SETMPBR =$E0CC64    SETMPBRC=$014E      SETMSTAT=$E0CC47    SETPBR  =$E0CC7A    SETPBRC =$0156      SETRTS  =$E0CA6B
   SETSCRN =$E0CC79    SETSCRNC=$0187      SETUP   =$E0CD6B    SETUPRT =$E0CE74    SETUPRTC=$013D      SHADOW  =$E0C035
   SHDIS   =$E0CAD7    SHFTSYMB=$E0CAF6    SIXTEEN =$E0CC8A    SKIPDLR =$E0CD24    SKIPREG =$E0CBBD    SLOTCN  =$E0C828
   SLOTINT =$E0C86A    SLOTN0  =$E0C829    SLOTPLP =$E0C809    SLOTROM =$E0C006    SLOTRTS =$E0C878    SORTBRK =$E0CCB7
   SPACE   =$E0CA1A    SPACES  =$E0CE6A    SPCBYTE =$E0CCF7    SPEEDREG=$E0C036    SPKR    =$E0C030    STACK   =$E0C817
   STACKBUF=$0F        STACKRES=$E0CE54    STAINDY =$E0CC55    STAINDYC=$0108      STAISAV =$E0C91C    STAPCIY =$E0CBE6
   STAPCIYC=$014A      STARTUP2=$E0C8C2    STATPASC=$E0CE3D    STATPASCC=$016E     STATUS  =$E0C81E    STAYIN  =$E0C80D
   STEP1   =$E0CA96    STEP1C  =$0110      STFLAG  =$E0C9B9    STKBUFA =$E0C954    STKBUFM =$E0C945    STKSWAP =$E0CE6F
   STKSWAPC=$0186      STOPBRK =$E0C846    STOROPER=$E0CBE1    STR80ON =$E0C001    STRIP   =$E0CCF7    STRIPMW =$E0CDBA
   STRT2FLG=$E0C826    SUBD1   =$E0CF48    SUBTABL0=$E0CF2C    SUBTABL1=$E0CF7E    SUBTABL2=$E0CF6B    SUBTABL3=$E0CF53
   SUBTABL4=$E0CF52    SUBTABL5=$E0CF67    SUBTABL6=$E0CF63    SUBTABL7=$E0CF58    SUBTRACE=$E0C84A    SUPERHR =$E0C029
   SUPERSAV=$E0C8F9    SVNUMBYT=$E0CC8B    SVTXTINC=$E0CD14    SWAPLET =$E0CF5C    SWAPNEXT=$E0CDCF    SWCHON1 =$E0CBD2
   SWCHON2 =$E0CBE5    SWCHON3 =$E0CC04    SYMBDONE=$E0CB3F    SYMBEND =$E0CCF6    S_COMDOFF=$00       S_COMDON=$00
   S_GETCOM=$0500      S_INTANL=$0500      S_LTRACE=$00        S_SAVEST=$00        S_TRACE1=$00        T3BYTE2 =$E0CE14
   TABLE1  =$E0C91C    TABLE2  =$E0C801    TABLE3  =$E0C901    TABLE4  =$E0CA01    TBL3END =$E0C935    TCOUNT  =$E0C890
   TEMP    =$E0C9A1    TEXTCLRS=$E0C9B8    TEXTCOLR=$E0C022    TEXTON  =$E0C051    TFLAG   =$E0C892    THISSEG =$E0CD37
   TOBP1B  =$E0CADE    TOBP5   =$E0CC4F    TOBP5A  =$E0CBA7    TOC0N0IO=$E0CD04    TOCOUT  =$E0CB67    TOERR0  =$E0CED1
   TOGOFLG =$E0C90D    TOMAERR =$E0CB3C    TOOKEX5 =$E0CC1B    TOPASCAL=$E0C89F    TORDCHAR=$E0CA26    TORDCHARC=$010E
   TOSLOT  =$E0C827    TOSLOTC0=$E0C815    TOTRACEN=$E0CC19    TRACE1  =$E0CA8E    TRACEN  =$E0CAC6    TRACEND =$E0CBC6
   TRACFLAG=$E0C8A8    TRANSFR0=$E0CFC6    TRANSFR1=$E0CFC6    TRANSFR2=$E0CFC6    TRANSFR3=$E0CFC6    TRANSFR4=$E0CFC6
   TRANSFR5=$E0CFC6    TRANSFR6=$E0CFC6    TRANSFR7=$E0CFC6    TRCONT  =$E0CA6B    TRRESTOR=$E0CF58    TRSETVIA=$E0CE83
   TRSETVIAC=$0152     TSFLAG  =$E0C8A2    TWOBYTE =$E0CDC1    TXTPAGE1=$E0C054    TXTPAGE2=$E0C055    TYPEOK  =$E0CC4D
   UNPACK  =$E0CCB3    UPARROW =$8B        UPDATE  =$E0CA36    UPDBRKW =$E0CEF9    UPDTMW  =$E0CDB7    USERDISP=$E0CBCB
   USERINT =$E0C8FA    USEROPCD=$E0C83F    USERSUB =$E0CC3C    V0003FB =$E0C9A5    V0103FB =$E0C9A8    VALID2  =$E0CD5F
   VALIDAD =$E0CD5D    VALIDADC=$013A      VALIDPC =$E0CD5A    VALIDPCC=$0132      VE10070 =$E0C9AB    VERSION =$0171
   VIAACR  =$E0C80B    VIADRA  =$E0C803    VIADRB  =$E0C802    VIAIER  =$E0C80E    VIAIFR  =$E0C80D    VIAORA  =$E0C801
   VIAORB  =$E0C810    VIAPCR  =$E0C80C    VIAT2CH =$E0C809    VIAT2CL =$E0C808    VIDOUT  =$E0CB70    VTAB    =$E0CBE6
   VTABC   =$018F      WAIT    =$E0CC64    WAIT2   =$E0CC65    WAIT3   =$E0CC66    WAITC   =$017F      WAITCR  =$E0CF4D
   WAITCRC =$0155      WARMENTR=$E0C808    WARMINIT=$E0CDB2    WARMINITC=$017E     WINDBTM =$E0C902    WINDDR  =$E0CF44
   WINDDRC =$01A6      WINDFLG =$E0C898    WINDFUL =$E0CB1D    WINDFULC=$012C      WINDLEFT=$E0C8FF    WINDM10 =$E0CBA4
   WINDTOP =$E0C901    WINDWDTH=$E0C900    WORKSTAK=$0150      WRDONE2 =$E0CC14    WRITACC2=$E0CC0F    WRITAUX =$E0C005
   WRITDON4=$E0CB12    WRITDON5=$E0CB0D    WRITDON7=$E0CD48    WRITE1  =$E0CDD5    WRITE2  =$E0CBFD    WRITE4  =$E0CAFA
   WRITE5  =$E0CAF5    WRITE6  =$E0CE07    WRITEAUX=$E0CC70    WRITECK7=$E0CD3E    WRITFAIL=$20        WRITLOP1=$E0CDDA
   WRITLOP2=$E0CC02    WRITLOP4=$E0CAFF    WRITLOP5=$E0CAFA    WRITLOP6=$E0CE0C    WRITMAIN=$E0C004    WRITREG =$E0CC28
   WRTAUXIN=$E0CA87    WSTKBUFF=$E0C91D    WSTKLGTH=$28        WSTKRES =$E0CE46    WSTKRESC=$0120      XBUFF   =$E0C849
   XFRIO   =$E0C87C    XOFFSET =$E0CC40    XREG    =$E0C813    XREG1   =$E0C813    XSAVESEG=$E0C863    XSPACES =$E0CA5A
   YBUFF   =$E0C847    YNOTZER0=$E0CDF5    YREG    =$E0C815    YSAVESEG=$E0C865    Z1HI    =$21        Z1LO    =$20
   Z2HI    =$23        Z2LO    =$22        ZBUF5   =$24        ZBUF6   =$25        ZBYTE1  =$E0C82C    ZPAGEXT =$E0C84E
   ZPAGSAVE=$E0CC08    ZPAGSAVEC=$012E     ]SEGNUM =$0700   

Symbol table, numerical order:

   S_COMDON=$00        S_SAVEST=$00        S_TRACE1=$00        DEBUG   =$00        S_COMDOFF=$00       NOLIST  =$00
   S_LTRACE=$00        INVCOM  =$01        BADPAR  =$04        CMDTBLSIZ=$0A       STACKBUF=$0F        BRKFUL  =$10
   AM_A_NE =$19        Z1LO    =$20        WRITFAIL=$20        Z1HI    =$21        Z2LO    =$22        Z2HI    =$23
   ZBUF5   =$24        ZBUF6   =$25        WSTKLGTH=$28        BASL    =$28        BASH    =$29        BAS2L   =$2A
   BAS2H   =$2B        BADRT   =$30        CSWL    =$36        CSWH    =$37        KSWL    =$38        KSWH    =$39
   EOT     =$84        BEL     =$87        LTARROW =$88        LF      =$8A        DNARROW =$8A        UPARROW =$8B
   CR      =$8D        CTRLS   =$93        RTARROW =$95        CTRLX   =$98        ESC     =$9B        DELETE  =$FF
   LDAINDYC=$0100      GETCHRC =$0101      PUTBREAKC=$0102     INITMMVC=$0103      DISBROUTC=$0104     DISBREAKC=$0105
   LTABLE1C=$0106      COUTC   =$0107      STAINDYC=$0108      CHKREADC=$0109      DECMEMLHC=$010B     DISNOTRMC=$010C
   TORDCHARC=$010E     CROUTC  =$010F      STEP1C  =$0110      CHKREADAC=$0111     DISREG2C=$0112      INCMEMLHC=$0113
   DISHARDC=$0114      DISVERSC=$0115      RESTSTUFC=$0116     RDCHARC =$0117      EXECUTEC=$0118      DSMEMCOLC=$0119
   ROMTORAMC=$011A     LOADMEMC=$011B      OUTPRGRC=$011C      DSCOPYRC=$011D      RESTTEXTC=$011E     PRERRC  =$011F
   WSTKRESC=$0120      DSPBRKC =$0121      DECTGPCC=$0122      DISASMC =$0123      NOACMSGC=$0124      PASCALIOC=$0125
   RESTDISPC=$0126     PRBL2C  =$0127      AX2S1_AC=$0128      WINDFULC=$012C      ERRBEEPC=$012D      ZPAGSAVEC=$012E
   VALIDPCC=$0132      BANKCHEKC=$0134     CKACCESC=$0135      SAVEDISPC=$0136     PRBYTEC =$0137      VALIDADC=$013A
   CALCEFFC=$013C      SETUPRTC=$013D      INITRAMVC=$013E     PRNTAXC =$013F      REPLACEC=$0142      RESTRTC =$0145
   PRHEXC  =$0147      STAPCIYC=$014A      CHKRANGC=$014D      SETMPBRC=$014E      RECEIVEC=$014F      WORKSTAK=$0150
   TRSETVIAC=$0152     WAITCRC =$0155      SETPBRC =$0156      GETLNC  =$0157      ETVCONTC=$015A      INITPASCC=$015E
   INPASCALC=$0166     GETLNNOC=$0167      STATPASCC=$016E     CLREOLC =$016F      VERSION =$0171      OUTPASCLC=$0176
   BELLC   =$0177      WARMINITC=$017E     WAITC   =$017F      STKSWAPC=$0186      SETSCRNC=$0187      DISPONC =$018E
   VTABC   =$018F      INITDISRC=$0196     CLRHOMEC=$0197      DSPHBPC =$019E      HOMEC   =$019F      WINDDRC =$01A6
   DISFLGWC=$01A7      DISMEMWC=$01AF      DISBRKWC=$01B7      DISPROTWC=$01BF     DISFMESC=$01C7      S_GETCOM=$0500
   S_INTANL=$0500      ]SEGNUM =$0700      CNSLOT  =$07F8   MD MX16    =$8000   MD INDEX16 =$8000   MD MEMORY8 =$8000
MD INDEX8  =$8000   MD MEMORY16=$8000   MD MX8     =$8000      COUT1APL=$FDF0      MONITOR =$FF69      KBD     =$E0C000
   STR80ON =$E0C001    READMAIN=$E0C002    READAUX =$E0C003    WRITMAIN=$E0C004    WRITAUX =$E0C005    SLOTROM =$E0C006
   MAINZP  =$E0C008    AUXZP   =$E0C009    COL80ON =$E0C00D    KBDSTRB =$E0C010    CXFLAG  =$E0C015    ALTZP   =$E0C016
   HIRESFLG=$E0C01D    TEXTCOLR=$E0C022    SUPERHR =$E0C029    SPKR    =$E0C030    SHADOW  =$E0C035    SPEEDREG=$E0C036
   TEXTON  =$E0C051    MIXEDOFF=$E0C052    TXTPAGE1=$E0C054    TXTPAGE2=$E0C055    GS_STATE=$E0C068    SEGMBASE=$E0C088
   MSGINVBP=$E0C800    MSGSKIP =$E0C800    MSGVERS =$E0C800    MSGSWSET=$E0C800    MSGBORDR=$E0C800    MSGREGA =$E0C800
   TABLE2  =$E0C801    VIAORA  =$E0C801    VIADRB  =$E0C802    VIADRA  =$E0C803    MSGKEY  =$E0C806    VIAT2CL =$E0C808
   WARMENTR=$E0C808    VIAT2CH =$E0C809    SLOTPLP =$E0C809    VIAACR  =$E0C80B    VIAPCR  =$E0C80C    VIAIFR  =$E0C80D
   STAYIN  =$E0C80D    VIAIER  =$E0C80E    MSGBROUT=$E0C80E    VIAORB  =$E0C810    ACC     =$E0C811    ACC1    =$E0C811
   XREG    =$E0C813    XREG1   =$E0C813    MSGBRKPT=$E0C813    YREG    =$E0C815    TOSLOTC0=$E0C815    STACK   =$E0C817
   DREG    =$E0C819    DBR     =$E0C81B    MSTATE  =$E0C81C    MSGHARDB=$E0C81C    QREG    =$E0C81D    STATUS  =$E0C81E
   MSGOFF  =$E0C81E    MSGNOTRM=$E0C81E    PCLO    =$E0C81F    PCHI    =$E0C820    PBR     =$E0C821    INVISIBL=$E0C822
   CMOSFLAG=$E0C823    IOMODE  =$E0C824    OFFFLAG =$E0C825    STRT2FLG=$E0C826    TOSLOT  =$E0C827    MSGOUT  =$E0C828
   SLOTCN  =$E0C828    SLOTN0  =$E0C829    ZBYTE1  =$E0C82C    MSGAVAIL=$E0C82D    DATABRK =$E0C82F    LETTER1 =$E0C830
   FLAGS   =$E0C830    LETTER2 =$E0C831    MSGHARD =$E0C832    MSG02   =$E0C832    LETTER3 =$E0C832    LETTER4 =$E0C833
   LETTER5 =$E0C834    LETTER7 =$E0C836    LETTER8 =$E0C837    SBTYPE  =$E0C838    BRKTYPE =$E0C838    DECIMAL1=$E0C839
   DECIMAL2=$E0C83A    DECIMAL3=$E0C83B    DBRDDT  =$E0C83C    MSG816  =$E0C83C    MEMLOW  =$E0C83D    MEMHI   =$E0C83E
   USEROPCD=$E0C83F    MSGORNG =$E0C83F    OPCODE  =$E0C840    IOSTUF0 =$E0C840    MLIFLAG =$E0C841    MSGCR   =$E0C841
   P16FLAG =$E0C842    IERBUFF =$E0C843    ENABLTVC=$E0C844    STOPBRK =$E0C846    YBUFF   =$E0C847    XBUFF   =$E0C849
   SUBTRACE=$E0C84A    ZPAGEXT =$E0C84E    IOSTUF1 =$E0C850    MSGNOAC =$E0C857    RTSTACK =$E0C85A    MSGCOPYR=$E0C85B
   CMDDORTS=$E0C85B    RTOPCODE=$E0C85C    IOSTUF7 =$E0C85C    RTJSRFLG=$E0C85D    OLDSTACK=$E0C85E    ASAVESEG=$E0C861
   XSAVESEG=$E0C863    YSAVESEG=$E0C865    PSAVESEG=$E0C867    DISPTABL=$E0C868    SLOTINT =$E0C86A    BRKPBR  =$E0C86A
   IOSTUF8 =$E0C86C    ETIERSAV=$E0C86F    ETORASAV=$E0C870    IORETRN =$E0C871    ETORBSAV=$E0C871    ETPCLO  =$E0C872
   ETPCHI  =$E0C873    OPERAND =$E0C874    INITFLAG=$E0C876    SLOTRTS =$E0C878    INDYBUF =$E0C879    ALTZPBF =$E0C87C
   XFRIO   =$E0C87C    DTOHFLG =$E0C87D    ADDRS2F =$E0C87E    IOSPACE7=$E0C880    IOSPACE0=$E0C880    IOSPACE8=$E0C880
   C0INT   =$E0C881    IOCX8   =$E0C881    IOSPACE1=$E0C882    IOOPCD  =$E0C884    IOCX7   =$E0C884    IOLADRS =$E0C885
   IODBR   =$E0C887    IOACC   =$E0C888    IOUSER  =$E0C888    IORTI   =$E0C889    IORTL   =$E0C88A    BREAK   =$E0C88A
   BANKTABL=$E0C88A    IOSEGM  =$E0C88B    IOPCLO  =$E0C88B    IOPCHI  =$E0C88C    IOPBR   =$E0C88D    IOCN0   =$E0C88F
   TCOUNT  =$E0C890    TFLAG   =$E0C892    RTBRKFLG=$E0C893    REALTIME=$E0C894    PROGONLY=$E0C895    NOACCESS=$E0C896
   WINDFLG =$E0C898    BRKWFLG =$E0C899    PASSFLG =$E0C89A    HALT_ALL=$E0C89B    COMRTFLG=$E0C89C    BRKHI   =$E0C89C
   RTSTATUS=$E0C89D    EFLAG   =$E0C89E    TOPASCAL=$E0C89F    GOFLAG  =$E0C89F    RTSFLAG =$E0C8A0    TSFLAG  =$E0C8A2
   ETFLAG  =$E0C8A3    IFLAG   =$E0C8A5    PBR8    =$E0C8A6    DISPFLAG=$E0C8A7    TRACFLAG=$E0C8A8    BRKTRFLG=$E0C8A9
   MEMWADR =$E0C8AA    EFFTABL =$E0C8AE    COMMANDS=$E0C8B9    STARTUP2=$E0C8C2    BRKLOW  =$E0C8CE    EFFADRS =$E0C8CE
   MSGBORD2=$E0C8D0    PROTADR =$E0C8D1    MSGAVAL2=$E0C8D6    MSGMODE =$E0C8E2    BANKENT =$E0C8F6    NMICONT =$E0C8F7
   REALBRK =$E0C8F7    POINT   =$E0C8F8    SUPERSAV=$E0C8F9    USERINT =$E0C8FA    PROMPT  =$E0C8FA    BASBUF  =$E0C8FB
   WINDLEFT=$E0C8FF    BRKTGHI =$E0C900    WINDWDTH=$E0C900    WINDTOP =$E0C901    TABLE3  =$E0C901    WINDBTM =$E0C902
   CURSHORZ=$E0C903    CURSVERT=$E0C904    MEMHORZ =$E0C906    INLENGTH=$E0C907    MEMPBR  =$E0C908    NUMDISP =$E0C909
   MNEMCOMP=$E0C90A    TOGOFLG =$E0C90D    SELFMOD =$E0C90E    HARDPBR =$E0C912    COMDEND =$E0C913    RET_ADD =$E0C913
   COMDJUMP=$E0C913    CXSTATUS=$E0C917    LOWADD  =$E0C918    HIADD   =$E0C919    EMULATE =$E0C91B    STAISAV =$E0C91C
   TABLE1  =$E0C91C    WSTKBUFF=$E0C91D    CMNDSEG1=$E0C925    BRKTGLOW=$E0C932    MNEMTABL=$E0C935    TBL3END =$E0C935
   CMNDSEG2=$E0C941    CMNDSEG3=$E0C945    STKBUFM =$E0C945    CMNDSEG4=$E0C947    STKBUFA =$E0C954    CMNDSEG5=$E0C955
   MSGENTER=$E0C95F    IN      =$E0C963    BRKPASHI=$E0C964    MSGET   =$E0C96C    COMDSEGN=$E0C96D    MSGFLAGS=$E0C977
   FASTET  =$E0C97E    MSGFLG16=$E0C990    BRKPASLO=$E0C996    DDTSTACK=$E0C99E    TEMP    =$E0C9A1    V0003FB =$E0C9A5
   V0103FB =$E0C9A8    MSGFENT =$E0C9A9    VE10070 =$E0C9AB    MODE    =$E0C9B0    RESTFLAG=$E0C9B1    MSGCRES =$E0C9B1
   BRKSTUF =$E0C9B2    DDT3F8  =$E0C9B5    TEXTCLRS=$E0C9B8    STFLAG  =$E0C9B9    KEY     =$E0C9BA    MSGBREAK=$E0C9C1
   BRKDATA =$E0C9C8    MSGREAL =$E0C9D0    CREGOFF =$E0C9DF    CSYMOFF =$E0C9F1    NMIVEC2 =$E0CA00    PUTBREAK=$E0CA00
   GETCOMCR=$E0CA00    COMDSB  =$E0CA00    COMDTS  =$E0CA00    CROUT   =$E0CA00    TABLE4  =$E0CA01    COUT    =$E0CA02
   PUTBRK2 =$E0CA08    GETCOM  =$E0CA0E    COMDMA  =$E0CA14    SPACE   =$E0CA1A    LTABLE1 =$E0CA1C    PRERR   =$E0CA1E
   COMDSKIP=$E0CA23    MANOADDR=$E0CA24    TORDCHAR=$E0CA26    BELL    =$E0CA2B    RDCHAR  =$E0CA2F    HARDSTP =$E0CA30
   COMMDRCL=$E0CA34    INAUX   =$E0CA34    UPDATE  =$E0CA36    CONTNMI =$E0CA37    ETVECTOR=$E0CA3A    PRNTAX  =$E0CA3C
   PRBYTE  =$E0CA40    COMDKEY =$E0CA47    MAINCMEM=$E0CA47    CMDOCONT=$E0CA49    PRHEX   =$E0CA4B    MASTLET1=$E0CA4F
   INMAIN  =$E0CA54    PRBLNK  =$E0CA56    ERROR4  =$E0CA57    PRBL2   =$E0CA58    XSPACES =$E0CA5A    COMDTR  =$E0CA5D
   COMDSS  =$E0CA60    SEND    =$E0CA61    COMDEX  =$E0CA65    RECEIVE =$E0CA66    COMDST  =$E0CA68    TRCONT  =$E0CA6B
   SETRTS  =$E0CA6B    KEYPRES =$E0CA72    BADPAR0 =$E0CA73    KEYCLIK =$E0CA74    ERREXIT0=$E0CA75    LOADT   =$E0CA7F
   WRTAUXIN=$E0CA87    NOTCR   =$E0CA88    COMDER  =$E0CA8B    FINDMNEM=$E0CA8B    TRACE1  =$E0CA8E    NOTFULL =$E0CA8E
   KEYIN   =$E0CA8F    PUTDONE =$E0CA91    KEYIN2  =$E0CA91    DISREG2 =$E0CA92    STEP1   =$E0CA96    ISRAM   =$E0CA98
   LOOKBRK =$E0CA99    LTRACEVC=$E0CA9A    NOTCR1  =$E0CA9D    NEXTREG =$E0CA9E    NEXTMNEM=$E0CA9F    KEYINRTS=$E0CA9F
   DDT0070 =$E0CAA0    GETLNZ  =$E0CAA2    DDT3FB  =$E0CAA4    GETLN   =$E0CAA5    BKPDIS  =$E0CAA6    MAERR   =$E0CAA7
   RESTSTUF=$E0CAA7    DISVERS =$E0CAA9    ENDSTDR =$E0CAA9    COMDHB  =$E0CAAC    GETNOT  =$E0CAAF    RESTAUX =$E0CAB3
   BCKSPC  =$E0CAB7    NXTCHAR =$E0CABB    GETLNNO =$E0CABE    FOUNDMNE=$E0CAC0    DISBROUT=$E0CAC3    TRACEN  =$E0CAC6
   DISNOTRM=$E0CAC9    CHEKSYMB=$E0CACE    DISHARD =$E0CACF    FROMADRS=$E0CAD1    OUTPRGR =$E0CAD5    SHDIS   =$E0CAD7
   NODISH  =$E0CADA    COMDRB  =$E0CADC    TOBP1B  =$E0CADE    RBOK    =$E0CAE1    DSCOPYR =$E0CAE6    CLRSHFT =$E0CAED
   ISSYMB  =$E0CAF0    DOWRITE4=$E0CAF1    INVBREAK=$E0CAF2    OKCIS4  =$E0CAF4    NOACMSG =$E0CAF5    WRITE5  =$E0CAF5
   RBTOM11 =$E0CAF5    SHFTSYMB=$E0CAF6    COMDRH  =$E0CAF7    WRITE4  =$E0CAFA    WRITLOP5=$E0CAFA    COMDRA  =$E0CAFC
   LIS1    =$E0CAFE    WRITLOP4=$E0CAFF    LIS0    =$E0CAFF    COMDMM  =$E0CB01    INCSYMB =$E0CB09    NEXTSYM =$E0CB0A
   WRITDON5=$E0CB0D    WRITDON4=$E0CB12    DISBREAK=$E0CB18    WINDFUL =$E0CB1D    COMDPE  =$E0CB1F    DOCOUT  =$E0CB22
   DODISASM=$E0CB26    PPGETCOM=$E0CB2A    COMDPP  =$E0CB2D    BELLONE =$E0CB35    COMDMO  =$E0CB37    BELLTWO =$E0CB3B
   COMDSD  =$E0CB3B    TOMAERR =$E0CB3C    SYMBDONE=$E0CB3F    DISPSTAT=$E0CB42    NMICOMRT=$E0CB42    BELLRTS =$E0CB46
   OUTPUT  =$E0CB47    FLAGON  =$E0CB4A    DISPIOR0=$E0CB4C    BRKTRC  =$E0CB53    COMDMD  =$E0CB57    OUTMAIN =$E0CB59
   INCCH   =$E0CB5B    BPERR1  =$E0CB5F    ERREXIT1=$E0CB61    MDNOADDR=$E0CB67    NEXTFLAG=$E0CB67    TOCOUT  =$E0CB67
   MDAGAIN =$E0CB6B    MDLOOP  =$E0CB6D    LOOKDIR =$E0CB70    VIDOUT  =$E0CB70    NMITRC  =$E0CB75    MOVEONE =$E0CB78
   SAVESTAT=$E0CB7F    RELATIVE=$E0CB83    CHKZERO =$E0CB84    MOVEZERO=$E0CB8D    CMDMENU =$E0CB90    RELLONG =$E0CB92
   LEFTRTS =$E0CB94    RETURN  =$E0CB95    CHKRETRN=$E0CB96    LINEFEED=$E0CB98    COMDPC  =$E0CB9C    RESTTEXT=$E0CBA4
   WINDM10 =$E0CBA4    TOBP5A  =$E0CBA7    MTOM10  =$E0CBA8    OKEXIT5 =$E0CBAA    COMDQU  =$E0CBAB    BNCHBACK=$E0CBAD
   GETPPC  =$E0CBAF    COMDDAST=$E0CBAF    SCROLL1 =$E0CBB0    OFFSETOK=$E0CBB6    FOUNDOP =$E0CBBC    SKIPREG =$E0CBBD
   MODONE  =$E0CBC2    RESTDISP=$E0CBC5    TRACEND =$E0CBC6    COMDAE  =$E0CBC7    SCROLL2 =$E0CBC8    NEXTSW1 =$E0CBCA
   USERDISP=$E0CBCB    ASTAST  =$E0CBCB    COMDET  =$E0CBCC    SCRLMAIN=$E0CBD0    COMDDR  =$E0CBD0    COMDXE  =$E0CBD1
   SWCHON1 =$E0CBD2    INCSW1  =$E0CBD5    LEAVTRC =$E0CBD7    BPERR2  =$E0CBD7    ADRHEX  =$E0CBDA    COMDYE  =$E0CBDB
   NEXTSW2 =$E0CBDD    GETCOM2 =$E0CBDD    SCROLL3 =$E0CBDE    COMDPW  =$E0CBE0    STOROPER=$E0CBE1    EXCONT  =$E0CBE3
   SWCHON2 =$E0CBE5    COMDSE  =$E0CBE5    VTAB    =$E0CBE6    STAPCIY =$E0CBE6    MORETR  =$E0CBE7    CHKCTRLS=$E0CBE7
   DECSW1  =$E0CBE8    SETBASE =$E0CBE9    PWINPUT =$E0CBF2    MANEXT  =$E0CBF5    COMDDE  =$E0CBF9    SET80S  =$E0CBFA
   WRITE2  =$E0CBFD    MAERRBY2=$E0CBFF    WRITLOP2=$E0CC02    MANOTRAM=$E0CC02    COMDBE  =$E0CC03    SWCHON3 =$E0CC04
   RESTRTS =$E0CC07    ZPAGSAVE=$E0CC08    BRNCHOUT=$E0CC09    COMDEE  =$E0CC0E    WRITACC2=$E0CC0F    SAVEDISP=$E0CC12
   WRDONE2 =$E0CC14    CHKESC  =$E0CC15    CLREOL  =$E0CC17    TOTRACEN=$E0CC19    CLEOLZ  =$E0CC1A    TOOKEX5 =$E0CC1B
   DOSUB   =$E0CC1C    COUT2   =$E0CC1C    DISASM  =$E0CC1D    COMDIE  =$E0CC1D    DISMODE =$E0CC21    DOWRLOP2=$E0CC24
   WRITREG =$E0CC28    COMDQE  =$E0CC2C    GETCHOIC=$E0CC2D    USERSUB =$E0CC3C    CLRHOME =$E0CC3F    LDAPBRIY=$E0CC3F
   XOFFSET =$E0CC40    CHK816  =$E0CC45    CLRBOT  =$E0CC45    LDAPCIY =$E0CC45    SETMSTAT=$E0CC47    COMDGO  =$E0CC4A
   TYPEOK  =$E0CC4D    TOBP5   =$E0CC4F    GOATPC  =$E0CC51    LDAINDY =$E0CC51    COMDLI  =$E0CC51    STAINDY =$E0CC55
   HOME    =$E0CC58    ROMTORAM=$E0CC58    BPERR5  =$E0CC59    CARDSLT1=$E0CC5A    LIST    =$E0CC5C    INTANLYZ=$E0CC61
   SETMPBR =$E0CC64    WAIT    =$E0CC64    WAIT2   =$E0CC65    WAIT3   =$E0CC66    REPLACE =$E0CC6C    WRITEAUX=$E0CC70
   SETSCRN =$E0CC79    SETPBR  =$E0CC7A    CHK16X  =$E0CC83    CLEARALL=$E0CC87    SIXTEEN =$E0CC8A    SVNUMBYT=$E0CC8B
   CLRHARD =$E0CC94    FLGMOFF =$E0CC95    EXCHTEXT=$E0CC99    MEMDISP =$E0CC9D    ANDDSFL =$E0CC9D    EXECUTE =$E0CC9F
   MMDISHEX=$E0CCA2    DISFLGW =$E0CCA2    MMDISASC=$E0CCB2    UNPACK  =$E0CCB3    SORTBRK =$E0CCB7    MAKEDOT =$E0CCC0
   MMDISOK =$E0CCC2    SAVENEXT=$E0CCC9    DSMEMCOL=$E0CCD0    NEXTSYMB=$E0CCE1    GETSYMB =$E0CCE5    MSNYBPW =$E0CCEB
   NOSYMBOL=$E0CCF0    LSNYBPW =$E0CCF4    SYMBEND =$E0CCF6    SPCBYTE =$E0CCF7    STRIP   =$E0CCF7    INCTEXT =$E0CCFD
   TOC0N0IO=$E0CD04    CHKHEX  =$E0CD05    GETCHR  =$E0CD06    EMPTY   =$E0CD11    CHKREAD =$E0CD12    SVTXTINC=$E0CD14
   CHKREADA=$E0CD14    READAD2 =$E0CD1C    GETCHAR =$E0CD1E    SKIPDLR =$E0CD24    AX2S1_A =$E0CD25    COMDMW  =$E0CD26
   FLAGDISP=$E0CD28    BIT0    =$E0CD2F    AX2S1_B =$E0CD30    AX2S1_C =$E0CD33    READAD  =$E0CD36    THISSEG =$E0CD37
   NEXTTEXT=$E0CD3A    INITRAMV=$E0CD3B    MWINPUT =$E0CD3D    WRITECK7=$E0CD3E    WRITDON7=$E0CD48    CKRDERR =$E0CD4B
   DISMEMW =$E0CD4D    ITISHEX =$E0CD4D    ISDEC   =$E0CD50    DECTGPC =$E0CD53    DECTOGO =$E0CD56    RELADDRS=$E0CD59
   VALIDPC =$E0CD5A    CHKKSW  =$E0CD5C    VALIDAD =$E0CD5D    VALID2  =$E0CD5F    EXCHZPAG=$E0CD61    SETUP   =$E0CD6B
   RTSREST =$E0CD78    SAVEREG =$E0CD82    DISEFFW =$E0CD8D    SAVESTK =$E0CD9F    DISPADDR=$E0CDA8    SETBANK =$E0CDAD
   ASLUPMW =$E0CDAE    WARMINIT=$E0CDB2    UPDTMW  =$E0CDB7    STRIPMW =$E0CDBA    TWOBYTE =$E0CDC1    ADDRS2  =$E0CDC4
   NOEXTEND=$E0CDC4    INITCONT=$E0CDC7    BANKCHEK=$E0CDC8    CKREAD16=$E0CDCC    ONEOFFST=$E0CDCD    SWAPNEXT=$E0CDCF
   WRITE1  =$E0CDD5    PASCALIO=$E0CDD8    DISBRKW =$E0CDD9    WRITLOP1=$E0CDDA    DSPBORDR=$E0CDDB    SAVEWSTK=$E0CDDF
   MATCHPC =$E0CDE3    DISPASIS=$E0CDEA    ERRBEEP =$E0CDEF    YNOTZER0=$E0CDF5    DISPAS2 =$E0CE02    DISBKP  =$E0CE03
   WRITE6  =$E0CE07    INTSTUFF=$E0CE07    CKACCES =$E0CE0A    NOTAUX  =$E0CE0A    WRITLOP6=$E0CE0C    MAINRAM =$E0CE0F
   ISAUX   =$E0CE14    T3BYTE2 =$E0CE14    MAKENOP =$E0CE1D    BANKSET =$E0CE20    BANKEFF =$E0CE21    DISPROTW=$E0CE22
   PRINT?  =$E0CE2A    DSPBRK  =$E0CE2C    INITPASC=$E0CE35    ENDDISAS=$E0CE35    INPASCAL=$E0CE39    MLICODE =$E0CE3A
   CALCEFF =$E0CE3C    STATPASC=$E0CE3D    P16CODE =$E0CE3D    DISPBYTS=$E0CE41    OUTPASCL=$E0CE42    WSTKRES =$E0CE46
   CONDEQ  =$E0CE48    CONDBRKS=$E0CE48    CONDLT  =$E0CE4C    NOEFF   =$E0CE4D    CONDGE  =$E0CE50    EFFM7   =$E0CE50
   CONDNE  =$E0CE54    STACKRES=$E0CE54    M11CONT =$E0CE56    CONDGT  =$E0CE58    EFFM11  =$E0CE5E    CONDLE  =$E0CE5E
   NOBRK   =$E0CE62    EFFMB   =$E0CE63    GOPASCAL=$E0CE64    SPACES  =$E0CE6A    DOBRK   =$E0CE6A    EFFM2   =$E0CE6C
   DBYTEEND=$E0CE6E    STKSWAP =$E0CE6F    BYTESP3 =$E0CE6F    PC2LETR =$E0CE70    EFFM14  =$E0CE73    SETUPRT =$E0CE74
   COUT3   =$E0CE75    EFFM15  =$E0CE78    DECMEMLH=$E0CE7A    EFFM5   =$E0CE80    DISFMES =$E0CE81    FINDOPCD=$E0CE82
   TRSETVIA=$E0CE83    NEWOPER =$E0CE84    DISPON  =$E0CE84    M15CONT =$E0CE86    EFFSTA  =$E0CE8D    EFFM6   =$E0CE99
   CALCTIME=$E0CE9A    INITDISR=$E0CEA4    POSIBLOP=$E0CEA9    ADCBALT =$E0CEAB    BANKALT =$E0CEAD    NEXTOPCD=$E0CEB2
   NEXTOPER=$E0CEB8    INVPROC =$E0CEBC    CHKMODE =$E0CEBE    EFFM3   =$E0CEBE    EFFM8   =$E0CEC3    M9CONT  =$E0CEC6
   M14CONT =$E0CEC9    COMDJS  =$E0CEC9    DISHB   =$E0CECD    TOERR0  =$E0CED1    JSCONT  =$E0CED4    EFFM9   =$E0CED4
   DISINVBP=$E0CED8    EFFMC   =$E0CED9    EFFMF   =$E0CEDE    GETCOM1 =$E0CEDF    M13CONT =$E0CEE1    DECHEX  =$E0CEE8
   PROCESOK=$E0CEEA    SETETVEC=$E0CEEA    INITMMV =$E0CEEC    EFFM10  =$E0CEEC    COMDRT  =$E0CEEE    ETERR   =$E0CEF6
   M12CONT =$E0CEF7    UPDBRKW =$E0CEF9    SAVEVIAR=$E0CEFB    EFFMA   =$E0CEFD    MCCONT  =$E0CF00    COMDON  =$E0CF01
   EFFM12  =$E0CF05    NOTBREAK=$E0CF06    EFFM13  =$E0CF0A    ONIFON  =$E0CF0F    INCMEMLH=$E0CF0F    LDA_EFF =$E0CF12
   RESTRT  =$E0CF13    DSPHBP  =$E0CF14    LDA_DREG=$E0CF15    COMDOFF =$E0CF15    LOADMEM =$E0CF17    LDA_OPR0=$E0CF18
   DSPADRS =$E0CF18    ETVCONT =$E0CF1A    LDAOPER =$E0CF1D    DSP16ADR=$E0CF23    GETCOM0 =$E0CF23    LOADMRTS=$E0CF26
   PACKMNEM=$E0CF27    CHKRANG =$E0CF28    SUBTABL0=$E0CF2C    DHRTS   =$E0CF2C    DSMWASC =$E0CF2F    ADDL1   =$E0CF30
   LEFT5   =$E0CF33    ADDL2   =$E0CF39    LDA_BNK0=$E0CF39    HARDBOFF=$E0CF43    WINDDR  =$E0CF44    DSPCBYT =$E0CF45
   GETBYTE =$E0CF45    SUBD1   =$E0CF48    GETCOM4 =$E0CF49    GETCOM3 =$E0CF4A    DCOLBYT =$E0CF4B    ETRESTOR=$E0CF4C
   WAITCR  =$E0CF4D    CLRLETER=$E0CF50    SUBTABL4=$E0CF52    SUBTABL3=$E0CF53    TRRESTOR=$E0CF58    SUBTABL7=$E0CF58
   SWAPLET =$E0CF5C    SUBTABL6=$E0CF63    SUBTABL5=$E0CF67    SUBTABL2=$E0CF6B    SUBTABL1=$E0CF7E    SAVEAXP3=$E0CF91
   SAVEAXP4=$E0CF91    SAVEAXP5=$E0CF91    SAVEAXP6=$E0CF91    SAVEAXP7=$E0CF91    SAVEAXP0=$E0CF91    SAVEAXP1=$E0CF91
   SAVEAXP2=$E0CF91    RESTAXP6=$E0CFA4    RESTAXP7=$E0CFA4    RESTAXP0=$E0CFA4    RESTAXP1=$E0CFA4    RESTAXP2=$E0CFA4
   RESTAXP3=$E0CFA4    RESTAXP4=$E0CFA4    RESTAXP5=$E0CFA4    PUTSLOT =$E0CFB6    JUMPSEG0=$E0CFB7    JUMPSEG1=$E0CFB7
   JUMPSEG2=$E0CFB7    JUMPSEG3=$E0CFB7    JUMPSEG4=$E0CFB7    JUMPSEG5=$E0CFB7    SEG2RTS =$E0CFC5    TRANSFR7=$E0CFC6
   TRANSFR0=$E0CFC6    TRANSFR1=$E0CFC6    TRANSFR2=$E0CFC6    TRANSFR3=$E0CFC6    TRANSFR4=$E0CFC6    TRANSFR5=$E0CFC6
   TRANSFR6=$E0CFC6    RETURN0 =$E0CFF0    RETURN1 =$E0CFF0    RETURN2 =$E0CFF0    RETURN3 =$E0CFF0    RETURN4 =$E0CFF0
   RETURN5 =$E0CFF0    RETURN6 =$E0CFF0    RETURN7 =$E0CFF0 

